在过去的几天里,我一直在阅读有关 windows 身份基础以及它如何如此出色和灵活并直接内置到 .net 4.5 中的信息。尽管浏览了数十个 api、博客文章、操作方法等。我一生都无法获得一个简单的实现工作。
我只使用 Windows 身份验证,我可以获取主体并查看它附带的声明(这是每个示例似乎结束的地方)。但是,我想将它们转换为有用的声明并缓存结果,以便转换不会发生在每个请求上。
在我的 web.config 中,我有:
<configSections>
<section name="system.identityModel" type="System.IdentityModel.Configuration.SystemIdentityModelSection, System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<section name="system.identityModel.services" type="System.IdentityModel.Services.Configuration.SystemIdentityModelServicesSection, System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</configSections>
<system.identityModel>
<identityConfiguration>
<claimsAuthenticationManager type="SecurityProj.MyClaimsTransformationModule,SecurityProj" />
<claimsAuthorizationManager type="SecurityProj.MyClaimsAuthorizationManager,SecurityProj" />
</identityConfiguration>
</system.identityModel>
但是,身份验证管理器永远不会被调用。我可以让它工作的唯一方法是添加:
protected void Application_PostAuthenticateRequest()
{
ClaimsPrincipal currentPrincipal = ClaimsPrincipal.Current;
ClaimsTransformationModule customClaimsTransformer = new MyClaimsTransformationModule();
ClaimsPrincipal tranformedClaimsPrincipal = customClaimsTransformer.Authenticate(string.Empty, currentPrincipal);
HttpContext.Current.User = tranformedClaimsPrincipal;
}
到我的 global.asax.cs 文件。它适用于第一个请求,但之后我收到“安全句柄已关闭”错误并且不知道是什么原因造成的。显然这不是正确的方法,所以有人知道什么是最佳或简单的工作实践吗?这只是用于 Windows 身份验证,我不需要比这更复杂的任何东西。
对于缓存,我试图使用:
SessionSecurityToken token = FederatedAuthentication.SessionAuthenticationModule
.CreateSessionSecurityToken(
currentPrincipal,
"Security test",
System.DateTime.UtcNow,
System.DateTime.UtcNow.AddHours(1),
true);
if (FederatedAuthentication.SessionAuthenticationModule != null &&
FederatedAuthentication.SessionAuthenticationModule.ContainsSessionTokenCookie(HttpContext.Current.Request.Cookies))
{
return;
}
FederatedAuthentication.SessionAuthenticationModule.WriteSessionTokenToCookie(token);
但我也不确定那部分,转换问题需要先解决。
任何帮助,将不胜感激。只需要调用查找/转换和 cookie 集,谢谢。