我的情况布局如下。
我有两个应用程序,一个将通过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"
};
}
答案 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,如果第一个应用程序注销,第二个应用程序也需要再次登录。