使用OWIN和ACS WSFedAuth指定自定义外部登录页面

时间:2015-10-05 15:52:18

标签: owin acs ws-federation

我有一个Web应用程序,它使用ACS联合多个身份提供程序,我正在尝试迁移以使用OWIN。我在一个单独的应用程序(与我共享SSO体验)中有一个自定义登录页面,我可以使用我在 wsfederation 配置元素中的 issuer 属性进行指定现有的OWIN前设置。

我尝试使用OWIN复制此行为,但无论我尝试什么,未经身份验证的请求都会重定向到标准(丑陋)ACS登录页面。以下是我配置中间件组件的方法:

app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    AuthenticationMode = AuthenticationMode.Active,
    Provider = new CookieAuthenticationProvider
    {
        OnResponseSignIn = ctx => TransformClaims(ctx.OwinContext.Authentication.User, loggingService)
    },
    ExpireTimeSpan = TimeSpan.FromMinutes(int.Parse(ConfigurationManager.AppSettings["security:slidingExpirationMins"])),
    SlidingExpiration = true,
});

app.UseWsFederationAuthentication(
new WsFederationAuthenticationOptions
{
    AuthenticationType = CookieAuthenticationDefaults.AuthenticationType,
    MetadataAddress = "https://mylogin.accesscontrol.windows.net/FederationMetadata/2007-06/FederationMetadata.xml",
    Wtrealm = siteUrl,
    Wreply = siteUrl,
    AuthenticationMode = AuthenticationMode.Active,
});

CookieAuthenticationOptions 对象的 LoginPath 属性不起作用,因为它不在同一个应用程序中。

任何有关如何指定外部登录网址的帮助都将不胜感激!

1 个答案:

答案 0 :(得分:0)

我建议设置为Passive WSFederation中间件AuthenticationMode,否则它将继续拦截传出401。