在 SharePoint 2019 中,启用声明身份验证后,我的 ASP.NET 应用程序中有一段代码可从当前经过身份验证的主体中提取用户身份。提取的对象属于 System.Security.Claims.ClaimsIdentity 类型,然后我使用代码片段将其转换为 Microsoft.IdentityModel.Claims.ClaimsIdentity;
IClaimsIdentity identity = (ClaimsIdentity)Thread.CurrentPrincipal.Identity;
这在 SharePoint 2019 中运行良好,但在 SharePoint 订阅版中失败,并显示以下错误消息;
[InvalidCastException: Unable to cast object of type 'System.Security.Claims.ClaimsIdentity' to type 'Microsoft.IdentityModel.Claims.ClaimsIdentity'.]
这让我相信 SharePoint 订阅版的内部发生了一些变化。那么我该如何在SharePoint订阅版中执行此操作呢?
除了我升级到 SharePoint 订阅版之外,没有什么不同。
SharePoint 订阅版似乎支持 .Net Framework 4.8。
基于此文章,从 .NET 4.5 开始,应使用 System.Security.Claims 类,而不是 System.IdentityModel.Claims 命名空间中的类。可能在某个时候,微软删除了向后兼容性。
检查这些图像以了解此更改是如何完成的:身份模型声明、新声明类 - 在此基础上调整您的代码。
“ICliamsIdentity 扩展了此接口以访问声明集合。Windows Identity Foundation 表示 Claim 类中的声明。”
就我而言,我需要改变的是:
using Microsoft.IdentityModel.Claims;
至 using System.Security.Claims;
((IClaimsIdentity) CurrentPrincipal.Identity)
至 (CurrentPrincipal.Identity as ClaimsIdentity)
IClaimsIdentity ClaimsIdentity
参考文献变为ClaimsIdentity ClaimsIdentity
请注意类别差异 - 一些属性已更改:例如
claim.ClaimType
变为 claim.Type
(claim
是 foreach (Claim claim in ClaimsIdentity.Claims)
的迭代变量)
请告诉我这是否适合您,或者我是否应该添加更多详细信息。