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