我希望使用 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
}
}
}
}
);