我创建了两个共享相同身份验证的MVC
个应用程序。在应用程序中,我正在使用可分配给每个用户的不同用户角色。当我以管理员身份登录时,一切正常,我登录到第一个应用程序,同一个cookie用于登录第二个应用程序,不涉及登录提示。
当我以分配给他们的不同角色的用户身份登录时,登录到第一个应用程序后登录屏幕会再次弹出,即使我也在那里登录,它也不会消失。
应用程序都位于同一IIS
服务器上。机器密钥在IIS
服务器中正确配置(显然,因为如果我以分配了管理员角色的用户身份登录,它就可以工作),这两个应用程序的代码都在Startup.Auth.cs
中:
第一次申请:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "DefaultCookie",
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
}
});
第二次申请:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "DefaultCookie",
AuthenticationMode = Microsoft.Owin.Security.AuthenticationMode.Active,
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("./Account/Login"),
Provider = new CookieAuthenticationProvider
{
// Enables the application to validate the security stamp when the user logs in.
// This is a security feature which is used when you change a password or add an external login to your account.
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager)),
OnApplyRedirect = ApplyRedirect
},
});
private static void ApplyRedirect(CookieApplyRedirectContext context)
{
Uri absoluteUri;
if (Uri.TryCreate(context.RedirectUri, UriKind.Absolute, out absoluteUri))
{
var path = PathString.FromUriComponent(absoluteUri);
Trace.WriteLine(path);
if (path == context.OwinContext.Request.PathBase + context.Options.LoginPath)
context.RedirectUri = "/Account/Login" +
new QueryString(
context.Options.ReturnUrlParameter,
context.Request.Uri.AbsoluteUri);
}
context.Response.Redirect(context.RedirectUri);
}
有谁知道为什么会这样,以及我可以做些什么来解决它?
答案 0 :(得分:3)
这是授权问题,而不是身份验证问题。如果您可以共享登录,例如管理员用户,那么一切正常。但是,必须授权用户的角色访问控制器/操作,否则它们仍将被重定向到登录页面,即使它们已经过身份验证。这是他们有机会使用具有适当权限的帐户重新进行身份验证,因为他们使用的帐户显然无法访问。
很长一段时间,您需要确保您希望用户能够访问的任何控制器/操作允许分配给它们的角色。