12

我可能不是第一个问但我们现在应该使用哪个?据我了解,它从 WCF 的一个非常小的System .IdentityModel 开始。然后是Microsoft .IdentityModel 类,它增加了很多。这是http://social.technet.microsoft.com/wiki/contents/articles/1898.aspx#v3q10中的情况

但是现在在 4.5 中,我看到System .IdentityModel 几乎包含Microsoft .IdentityModel 的所有类(尽管似乎进行了一些重构并且 web.config 中的配置略有不同)。
现在微软预发布了一个 JSON Web Token Handler 作为 nuget,它依赖于Microsoft .IdentityModel AND System .IdentityModel。(JWTSecurityTokenHandler 驻留在 Microsoft.IdentityModel.Tokens.JWT 中,派生自 System.IdentityModel.Tokens.SecurityTokenHandler)。

这变得相当混乱。有人知道我应该使用哪一个吗?

4

2 回答 2

11

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

当前的 WIF 4.5 版本(如果我理解正确,它们会在版本编号中跳转)已直接集成到核心 .NET 4.5 框架中。最极端的例子,IClaimsPrincipal 接口已被 ClaimsPrincipal 基类取代,所有 .NET IPrincipal 实现现在都从该基类派生 - 这直接在mscorlib.dll中。因此,System .IdentityModel 等命名空间。

当然,预发布的 JWT 处理程序 (nuget) 是一个带外版本。如果它进入核心 .NET vNext(假设 JWT 标准到那时最终确定),我一点也不感到惊讶,但在此之前,框架命名指南要求 JWTSecurityTokenHandler 等驻留在Microsoft .IdentityModel 中。

我能理解你的困惑;我可以从头开始我的项目,只需要担心 .NET 4.5,这让我受益匪浅——现在。:)

于 2013-01-05T04:48:14.537 回答
0

在WIF 3.5中的Microsoft.IdentityModel命名空间下收集的 WIF 类现在分布在以下命名空间中:System.Security.Claims、System.ServiceModel.Security 和WIF 4.5中的 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

于 2017-12-13T07:03:09.530 回答