Azure AD使用相同的Toke登录多个站点

时间:2017-06-16 17:49:36

标签: azure azure-active-directory

我的情况布局如下。

我有两个应用程序,一个将通过Azure广告进行身份验证,并且根据登录用户将显示指向第二个应用程序的链接。 在localhost中,它可以正常工作,第二个应用程序可以读取第一个应用程序中使用的令牌并验证用户。

但是当我在DEV环境中发布时,第二个应用程序无法读取cookie,并且对用户进行身份验证后,Azure页面会再次显示。

似乎在localhost中访问cookie没有任何问题,但是当我从IIS发布有效域时,这不会发生。

我的代码:

 
public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    //app.UseCookieAuthentication(new CookieAuthenticationOptions());
    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        CookieName = "NameOfMyApp",
        CookieDomain = "mydomain.com"
    });
    app.Use(async (context, next) => { await next.Invoke(); });

    app.UseOpenIdConnectAuthentication(this.CreateB2EOptions());
    app.Use(async (context, next) => { await next.Invoke(); });

}

private OpenIdConnectAuthenticationOptions CreateB2EOptions()
{
    return new OpenIdConnectAuthenticationOptions
    {
        Authority = string.Format(b2e.AadInstance, "common"),
        ClientId = b2e.ClientId,
        RedirectUri = sso.RedirectUri,
        PostLogoutRedirectUri = sso.RedirectUri,
        Notifications = new OpenIdConnectAuthenticationNotifications { AuthenticationFailed = this.AuthenticationFailed },
        TokenValidationParameters = new TokenValidationParameters { ValidateIssuer = false, SaveSigninToken = true  },
        AuthenticationMode = AuthenticationMode.Passive,
        AuthenticationType = "OpenIdConnect-B2E"
    };

}

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。 两个应用程序将与声明共享Cookie。 为此,两个应用程序都需要在web.config中共享相同的机器密钥。

的web.config

<configuration>
    <system.web>
        <machineKey decryptionKey="DECRYPTIONKEY" validationKey="VALIDATION_KEY" /> 
    </system.web>
    </configuration>

ConfigureAuth

 
public void ConfigureAuth(IAppBuilder app)
{
    app.SetDefaultSignInAsAuthenticationType(CookieAuthenticationDefaults.AuthenticationType);

    app.UseCookieAuthentication(new CookieAuthenticationOptions()
    {
        CookieName = "NameOfMyApp",
        CookieDomain = "mydomain.com",
        CookiePath = "/"
    });    
}

这样两者都会共享同一个cookie,如果第一个应用程序注销,第二个应用程序也需要再次登录。