ASP.NET Core中使用Identity自定义RoleProvider?

4
在过去的MVC版本中,我能够做到:
<roleManager enabled="true" defaultProvider="...." ...

以前我们可以在web.config中添加自定义角色提供程序,但现在似乎不再是这样了。

基本上,我想做的是:

  1. 用户登录
  2. 登录成功后,从外部源获取用户的角色
  3. 将角色应用于用户以在代码中使用
  4. 将用户角色与自定义RoleProvider中的角色匹配

如何在ASP.NET Core中实现这一点?


角色和成员提供程序在ASP.NET Core(或mvc6)中默认情况下不使用(不确定它们是否可以在核心中使用)。Identity Framework是现在由微软提供的框架。这是关于IF2的内容,但大多数都适用。请参见http://johnatten.com/2014/06/22/asp-net-identity-2-0-customizing-users-and-roles/,另请参见https://dev59.com/0WIk5IYBdhLWcg3wJ7L4。 - Erik Funkenbusch
1个回答

0

如果您使用的是基于简单 Cookie 的身份验证而不是 Identity 框架,则可以将您的角色添加为声明,它们将被 User.IsInRole(...)[Authorize(Roles = "...")] 等所识别。

private async Task SignIn(string username)
{
    var claims = new List<Claim>
    {
        new Claim(ClaimTypes.Name, username)
    };

    // TODO: get roles from external source
    claims.Add(new Claim(ClaimTypes.Role, "Admin"));
    claims.Add(new Claim(ClaimTypes.Role, "Moderator"));

    var identity = new ClaimsIdentity(
        claims,
        CookieAuthenticationDefaults.AuthenticationScheme,
        ClaimTypes.Name,
        ClaimTypes.Role
    );

    await HttpContext.SignInAsync(
        CookieAuthenticationDefaults.AuthenticationScheme,
        new ClaimsPrincipal(identity),
        new AuthenticationProperties
        {
            IsPersistent = true,
            ExpiresUtc = DateTime.UtcNow.AddMonths(1)
        }
    );
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接