В течение последних нескольких дней я читал об основах идентификации Windows и о том, как он так хорош и гибкий и построен прямо в .net 4.5. Несмотря на то, что вы перешли десятки apis, сообщений в блогах, инструкции и т.д., Я не могу на всю жизнь работать с простой реализацией.
Я использую только проверку подлинности 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, спасибо.