¿La canalización de autenticación OWIN y cómo usar el middleware Katana correctamente?
Recientemente comencé a mirar el nuevo marco de identidad ASP.Net y el middleware Katana, hay una sorprendente cantidad de código y documentación, pero veo que parece ser una gran cantidad de información contradictoria, lo que supongo que es una resultado de la frecuencia cada vez mayor de actualizaciones de código.
Estoy buscando utilizar la autenticación WsFederation contra un servicio interno ADFS 2, pero la forma en que funciona la canalización de autenticación OWIN me confunde un poco y espero que alguien pueda ofrecer algunosdefinitivo información.
Específicamente, estoy interesado en el orden en que se debe conectar el middleware y qué módulos se requieren en varios escenarios, me gustaría deshacerme de todo lo que no necesita estar allí y al mismo tiempo asegurarme de que el El proceso es lo más seguro posible.
Por ejemplo, parecería queUseWsFederationAuthentication
debe usarse junto conUseCookieAuthentication
, pero no estoy seguro de cuál es el correctoAuthenticationType
sería (esta post sugiere que es solo una cadena de identificación, pero ¿tiene un valor significativo?) o incluso si aún necesitamos usarSetDefaultSignInAsAuthenticationType
.
También me di cuentaesta hilo en el panel de discusión del Proyecto Katana, donde Tratcher menciona un error común, pero no es muy específico en cuanto a qué parte del código está en error.
Personalmente, ahora estoy usando lo siguiente (con un controlador de token SAML personalizado para leer la cadena de tokens en un documento XML válido), funciona para mí, pero ¿es óptimo?
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
}
}
}
}
);
Muchas gracias por todo lo que puede ofrecer para ayudarme a aclarar esta confusión.