Die OWIN-Authentifizierungs-Pipeline und wie verwende ich die Katana-Middleware richtig?

Ich habe vor kurzem angefangen, mich mit dem neuen ASP.Net Identity-Framework und der Katana-Middleware zu beschäftigen. Es gibt eine überraschende Menge an Code und Dokumentation, aber ich sehe, dass es viele widersprüchliche Informationen zu geben scheint ein Ergebnis der zunehmenden Häufigkeit von Code-Updates.

Ich möchte die WsFederation-Authentifizierung für einen internen ADFS 2-Dienst verwenden, aber die Funktionsweise der OWIN-Authentifizierungspipeline hat mich ein wenig verwirrt und ich hoffe, jemand kann einige @ -Dienste anbiete definitive Information

Speziell interessiert mich die Reihenfolge, in der Middleware angeschlossen werden soll und welche Module in verschiedenen Szenarien benötigt werden. Ich möchte alles loswerden, was nicht vorhanden sein muss, und gleichzeitig sicherstellen, dass es verfügbar ist Der Prozess ist so sicher wie möglich.

Zum Beispiel scheint es, dassUseWsFederationAuthentication sollte in Verbindung mit @ verwendet werdUseCookieAuthentication, aber ich bin nicht sicher, was das richtigeAuthenticationType wäre Diepost legt nahe, dass es sich nur um eine Bezeichnerzeichenfolge handelt, der Wert jedoch von Bedeutung isSetDefaultSignInAsAuthenticationType.

Ich habe auch bemerkt,Die Thread im Diskussionsforum des Katana-Projekts, in dem Tratcher einen häufigen Fehler erwähnt, aber nicht genau festlegt, welcher Teil des Codes fehlerhaft ist.

ersönlich verwende ich jetzt Folgendes (mit einem benutzerdefinierten SAML-Token-Handler zum Lesen der Token-Zeichenfolge in ein gültiges XML-Dokument): Funktioniert dies für mich, ist es jedoch optimal?

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
                }
            }
        }
    }
);

Vielen Dank für alles, was Sie anbieten können, um diese Verwirrung für mich zu beseitigen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage