Конвейер аутентификации 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
                }
            }
        }
    }
);

Большое спасибо за все, что вы можете предложить, чтобы прояснить эту путаницу для меня.

Ответы на вопрос(1)

Ваш ответ на вопрос