我是ASP.NET身份的新手,但从我所读过的内容来看,我的任务应该随之实现。
我想以一种
的方式结合角色和声明这通常是一种使用ASP.NET身份的可行方法吗?
我在这里找到了一个很有前途的方法:http://benfoster.io/blog/asp-net-identity-role-claims几乎看起来像我需要的基础以及博主使用RoleManager.AddClaimAsync()
向角色添加声明的地方。但是,该函数似乎不是2015年2月最新Microsoft.AspNet.Identity.Core
Nuget软件包v2.2.1的一部分,而是在此实现:https://github.com/aspnet/Identity/blob/master/src/Microsoft.AspNetCore.Identity/RoleManager.cs
我在这里混合什么吗?
答案 0 :(得分:3)
当您查看 System.Security.Claims.ClaimTypes 时,Role是ClaimTypes之一。基本上,Role是Claim的子集。
这完全取决于您打算如何使用它们。如果您使用默认 授权 过滤器,则需要将其添加为 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-Create
,User-Edit
,User-Delete
等角色,以便我可以使用授权属性。