gpt4 book ai didi

asp.net - 存储/分配经过身份验证的用户的角色

转载 作者:行者123 更新时间:2023-12-03 05:52:58 25 4
gpt4 key购买 nike

我正在升级网站以使用 MVC,并且正在寻找设置身份验证的最佳方法。

此时,我可以通过 Active Directory 进行登录:验证用户名和密码,然后设置身份验证 cookie。

如何在登录时存储用户的角色信息,以便我的 Controller 在用户浏览网站时看到这些角色?

[Authorize(Roles = "admin")]

我可以毫无问题地从 Active Directory 获取角色列表。我只是不知道将它们放在哪里以便 Controller 能够看到它们。

最佳答案

角色已添加到 IPrincipal HttpContext 的。您可以创建GenericPrincipal ,在构造函数中解析角色列表并将其设置为 HttpContext.User。然后可以通过 User.IsInRole("role")[Authorize(Roles="role")] 属性访问 GenericPrincipal

执行此操作的一种方法(在 C# 中)是在创建身份验证票证时将您的角色作为逗号分隔的字符串添加到用户数据参数中

string roles = "Admin,Member";
FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
1,
userId, //user id
DateTime.Now,
DateTime.Now.AddMinutes(20), // expiry
false, //do not remember
roles,
"/");
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName,
FormsAuthentication.Encrypt(authTicket));
Response.Cookies.Add(cookie);

然后从身份验证票证中访问角色列表,并从 Global.asax.cs 创建一个 GenericPrincipal

protected void Application_AuthenticateRequest(Object sender, EventArgs e) {
HttpCookie authCookie =
Context.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null) {
FormsAuthenticationTicket authTicket =
FormsAuthentication.Decrypt(authCookie.Value);
string[] roles = authTicket.UserData.Split(new Char[] { ',' });
GenericPrincipal userPrincipal =
new GenericPrincipal(new GenericIdentity(authTicket.Name),roles);
Context.User = userPrincipal;
}
}

关于asp.net - 存储/分配经过身份验证的用户的角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1822548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com