В WebForms я хранил роль в пользовательских данных FormsAuthenticationTicket, однако я попытался реализовать тот же метод в mvc 5, и это не сработало. По какой-то причине
User.Identity.IsAuthenticated
это возвращает ложь
var ticket = new FormsAuthenticationTicket(
1,
user.Id.ToString(),
DateTime.Now,
DateTime.Now.AddDays(5),
model.RememberMe,
user.Roles.Select(c => c.Nome).FirstOrDefault(),
FormsAuthentication.FormsCookiePath
);
// Encrypt the ticket.
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie.
HttpCookie authenticationCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket); // Name of auth cookie (it's the name specified in web.config) // Hashed ticket
authenticationCookie.Expires = DateTime.Now.AddDays(7);
// Add the cookie to the list for outbound response
Response.Cookies.Add(authenticationCookie);
так как это не работает, я использовал вместо этого
FormsAuthentication.SetAuthCookie(user.Id.ToString(), model.RememberMe);
проблема в том, что это не позволяет мне иметь легкий доступ к роли пользователя, чтобы я мог делать это в представлении
if (User.IsInRole("Admin"))
Я пытаюсь избежать Asp Net Identity, потому что он требует много настроек, и мне не нужны ни все дополнительные поля, ни пароль, потому что мы аутентифицируемся с помощью ldap.
Если есть другой вариант, посоветуйте.
Application_AuthenticateRequest
в своем проекте или там, где вы установилиContext.User
из файла cookie авторизации. - person Alexander   schedule 10.04.2019