Я создал два приложения MVC
с одинаковой аутентификацией. В приложениях я использую разные роли пользователей, которые можно назначить каждому пользователю. Когда я вхожу в систему как администратор, все работает нормально, я вхожу в первое приложение, и тот же файл cookie используется для входа во второе приложение, никаких запросов на вход не требуется.
Когда я вхожу в систему как пользователь с другой назначенной им ролью, экран входа в систему снова появляется после входа в первое приложение и не исчезает, даже если я тоже вхожу туда.
Оба приложения находятся на одном сервере IIS
. Машинный ключ настроен правильно на сервере IIS
(очевидно, поскольку он работает, если я вхожу в систему как пользователь с назначенной ролью администратора), и вот код в Startup.Auth.cs
для обоих приложений:
1-е приложение:
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))
}
});
2-е приложение:
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);
}
Кто-нибудь знает, почему это происходит и что я могу сделать, чтобы это исправить?
1 ответ
Это проблема авторизации, а не аутентификации. Если вы можете поделиться логином вообще , то есть в случае вашего администратора, то с этим все в порядке. Однако роль пользователя должна быть авторизована для доступа к контроллеру / действию, иначе они все равно будут перенаправлены на страницу входа, даже если они уже аутентифицированы. Это предназначено для них как возможность повторно аутентифицироваться с учетной записью с соответствующими привилегиями, поскольку тот, который они использовали, очевидно, не имеет доступа.
Короче говоря, вам необходимо убедиться, что любой контроллер (-ы) / действие (-а), к которому вы хотите, чтобы пользователь мог получить доступ, разрешал назначенную им роль.
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
[Authorize]
. Вы имеете в виду, что я должен конкретно указать, какие роли разрешены? Я думал, что все роли авторизованы, если не указано иное.[Authorize(Roles = "Administrator")]
в первом приложении, которое не позволяло другим ролям пользователей открывать веб-сайт. Спасибо!