Недавно я начал изучать новую платформу ASP.Net Identity и промежуточное ПО Katana, там удивительное количество кода и документации, но я вижу много противоречивой информации, которая, как я полагаю, является результат учащения обновлений кода.
Я хочу использовать аутентификацию WsFederation для внутренней службы ADFS 2, но способ работы конвейера аутентификации OWIN меня немного смущает, и я надеюсь, что кто-то может предложить некоторую окончательную информацию.
В частности, меня интересует порядок, в котором должно быть подключено промежуточное ПО и какие модули требуются в различных сценариях, я бы хотел избавиться от всего, что не должно быть там, и в то же время убедиться, что процесс максимально безопасен.
Например, может показаться, что UseWsFederationAuthentication
следует использовать вместе с UseCookieAuthentication
, но я не уверен, какой будет правильный AuthenticationType
(этот пост предполагает, что это всего лишь строка идентификатора, но имеет ли значение ее значение?) или даже если нам все еще нужно использовать SetDefaultSignInAsAuthenticationType
.
Я также заметил эту ветку на форуме обсуждения проекта Katana, где Тратчер упоминает распространенную ошибку, но не Трудно сказать, какая часть кода содержит ошибку.
Лично я сейчас использую следующее (с настраиваемым обработчиком токена 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
}
}
}
}
);
Большое спасибо за все, что вы можете предложить, чтобы помочь мне прояснить эту путаницу.