gpt4 book ai didi

ASP.NET Identity - 使用角色作为预定义的声明集

转载 作者:行者123 更新时间:2023-12-02 10:25:11 26 4
gpt4 key购买 nike

我是 ASP.NET Identity 的新手,但根据我所读到的内容,我的任务应该可以用它来实现。

我正在考虑以某种方式将角色声明结合起来

  • 角色用作用户在公司中的职能的抽象描述(“管理”、“销售”、“支持”等)
  • 声明用作其所有者可以执行的操作的具体声明(“创建用户”、“编辑支持请求”、“重置密码”)<
  • 将多个声明分配给角色,代表反射(reflect)每个角色权限的“权限集”。
  • 资源受可能需要角色或声明的策略保护

这通常是使用 ASP.NET Identity 的可行方法吗?

我在这里找到了一个有前途的方法:http://benfoster.io/blog/asp-net-identity-role-claims这看起来很像我需要的基础以及博主正在使用的RoleManager.AddClaimAsync()向角色添加声明。然而,该功能似乎并不属于最新的Microsoft.AspNet.Identity.Core的一部分。 Nuget 包 v2.2.1 从 2015 年 2 月开始,它的实现在这里:https://github.com/aspnet/Identity/blob/master/src/Microsoft.AspNetCore.Identity/RoleManager.cs我在这里混淆了什么吗?

最佳答案

当你查看 System.Security.Claims.ClaimTypes,Role是ClaimTypes之一。基本上,角色是声明的子集。

这完全取决于您计划如何使用它们。如果您使用默认的Authorize过滤器,则需要将它们添加为ClaimTypes.Role。请查看以下示例中的 claims.Add(new Claim(ClaimTypes.Role, roleName));

public class CustomAuthenticationService
{
private readonly HttpContextBase _context;
private const string AuthenticationType = "ApplicationCookie";

public CustomAuthenticationService(HttpContextBase context)
{
_context = context;
}

public void SignIn(User user, IList<string> roleNames)
{
IList<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Sid, user.Id.ToString()),
new Claim(ClaimTypes.Name, user.UserName),
new Claim(ClaimTypes.GivenName, user.FirstName),
new Claim(ClaimTypes.Surname, user.LastName),
};

foreach (string roleName in roleNames)
{
claims.Add(new Claim(ClaimTypes.Role, roleName));
}

ClaimsIdentity identity = new ClaimsIdentity(claims, AuthenticationType);

IOwinContext context = _context.Request.GetOwinContext();
IAuthenticationManager authenticationManager = context.Authentication;

authenticationManager.SignIn(identity);
}

public void SignOut()
{
IOwinContext context = _context.Request.GetOwinContext();
IAuthenticationManager authenticationManager = context.Authentication;

authenticationManager.SignOut(AuthenticationType);
}
}

意见

我个人不喜欢创建自定义声明名称,例如“创建用户”、“编辑支持请求”、“重置密码”。

相反,我将它们保留为角色,例如User-CreateUser-EditUser-Delete,这样我可以使用授权属性。

关于ASP.NET Identity - 使用角色作为预定义的声明集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42373150/

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