Конвейер аутентификации OWIN и как правильно использовать промежуточное ПО Katana?
Недавно я начал изучать новую инфраструктуру ASP.Net Identity и промежуточное программное обеспечение Katana, там есть удивительное количество кода и документации, но я вижу то, что кажется много противоречивой информации, которая, я думаю, результат увеличения частоты обновления кода.
Я пытаюсь использовать аутентификацию WsFederation для внутренней службы ADFS 2, но то, как работает конвейер аутентификации OWIN, немного смущает меня, и я надеюсь, что кто-то может предложить некоторыеокончательный Информация.
В частности, меня интересует порядок подключения промежуточного программного обеспечения и какие модули требуются в различных сценариях. Я бы хотел избавиться от всего, что не должно быть там, и в то же время обеспечить, чтобы Процесс максимально безопасен.
Например, может показаться, чтоUseWsFederationAuthentication
следует использовать вместе сUseCookieAuthentication
но я не уверен что правильноAuthenticationType
было бы (этот сообщение предполагает, что это просто строка идентификатора, но имеет ли это значение?) или даже если нам все еще нужно использоватьSetDefaultSignInAsAuthenticationType
.
Я тоже заметилэтот В обсуждении на форуме проекта Katana, где Tratcher упоминает об общей ошибке, но не очень точно указывает, какая часть кода содержит ошибку.
Лично я теперь использую следующее (с пользовательским обработчиком токена SAML для чтения строки токена в действительный документ XML), это работает для меня, но оптимально ли это?
var appURI = ConfigurationManager.AppSettings["app:URI"];
var fedPassiveTokenEndpoint = ConfigurationManager.AppSettings["wsFederation:PassiveTokenEndpoint"];
var fedIssuerURI = ConfigurationManager.AppSettings["wsFederation:IssuerURI"];
var fedCertificateThumbprint = ConfigurationManager.AppSettings["wsFederation:CertificateThumbprint"];
var audienceRestriction = new AudienceRestriction(AudienceUriMode.Always);
audienceRestriction.AllowedAudienceUris.Add(new Uri(appURI));
var issuerRegistry = new ConfigurationBasedIssuerNameRegistry();
issuerRegistry.AddTrustedIssuer(fedCertificateThumbprint, fedIssuerURI);
app.UseCookieAuthentication(
new CookieAuthenticationOptions
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType // "Federation"
}
);
app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
Wtrealm = appURI,
SignOutWreply = appURI,
Configuration = new WsFederationConfiguration
{
TokenEndpoint = fedPassiveTokenEndpoint
},
TokenValidationParameters = new TokenValidationParameters
{
AuthenticationType = WsFederationAuthenticationDefaults.AuthenticationType
},
SecurityTokenHandlers = new SecurityTokenHandlerCollection
{
new SamlSecurityTokenHandlerEx
{
CertificateValidator = X509CertificateValidator.None,
Configuration = new SecurityTokenHandlerConfiguration
{
AudienceRestriction = audienceRestriction,
IssuerNameRegistry = issuerRegistry
}
}
}
}
);
Большое спасибо за все, что вы можете предложить, чтобы прояснить эту путаницу для меня.