.NET 4.5中的microsoft.identityModel和system.identityModel有什么区别

时间:2012-11-27 00:51:45

标签: identity wif

我可能不是第一个问,但我们现在应该使用哪一个?据我所知,它始于一个非常小的系统 .IdentityModel for WCF。然后是 Microsoft .IdentityModel类,它们增加了很多。这就是http://social.technet.microsoft.com/wiki/contents/articles/1898.aspx#v3q10

中的情况

但现在在4.5中,我看到系统 .IdentityModel几乎所有类都来自 Microsoft .IdentityModel(尽管似乎有一些重构和Web配置.config略有不同)。
现在,Microsoft预发布了一个JSON Web令牌处理程序作为nuget,它取决于 Microsoft .IdentityModel和系统 .IdentityModel。 (JWTSecurityTokenHandler驻留在Microsoft.IdentityModel.Tokens.JWT中,派生自System.IdentityModel.Tokens.SecurityTokenHandler)。

这令人非常困惑。有谁知道我应该使用哪一个?

2 个答案:

答案 0 :(得分:10)

WIF 1.0版本,这是从Microsoft下载“Windows Identity Foundation”时获得的,目标是.NET 3.5(并且与.NET 4.0兼容)。由于它是一个带外版本,所有类型都必须存在于非核心命名空间( Microsoft .IdentityModel等)和非核心程序集中。

当前的WIF 4.5版本(如果我已经正确理解,他们跳进了版本编号)已直接集成到核心.NET 4.5 Framework中。最极端的例子,IClaimsPrincipal接口已被一个ClaimsPrincipal基类所取代,现在所有的.NET IPrincipal实现都是从这个基类中派生出来的 - 这直接在 mscorlib.dll 中。因此系统 .IdentityModel等名称空间。

预发布的JWT Handler(nuget)当然是一个带外版本。如果它进入核心.NET vNext(假设当时JWT标准已经完成),我会感到很惊讶,但在此之前,框架命名指南要求JWTSecurityTokenHandler等驻留在 Microsoft .IdentityModel。

我能理解你的困惑;我得到了帮助,因为我可以从头开始只使用.NET 4.5来担心 - 现在。 :)

答案 1 :(得分:0)

WIF类是在 WIF 3.5 中的 Microsoft.IdentityModel 名称空间下收集的,现在分布在以下名称空间中: System.Security.Claims WIF 4.5 中的,System.ServiceModel.Security和System.IdentityModel名称空间。此外,一些WIF 3.5名称空间在WIF 4.5中完全合并或删除。

参考:https://docs.microsoft.com/en-us/dotnet/framework/security/namespace-mapping-between-wif-3-5-and-wif-4-5