授权.net核心2.0

时间:2017-10-26 18:05:50

标签: asp.net-core authorization asp.net-core-mvc

我在我的asp.net核心应用程序中设置了cookie身份验证。我有一个登录页面,其中凭据与活动目录匹配。这一切都很好。 接下来我想在我的应用程序中实现授权。我有一个用户表以及对他们的许可。例如阅读和阅读等许可。写。当用户成功通过身份验证后,我想检查这些权限并在限制其他权限的同时向他们显示某些功能。例如,在隐藏读取权限时显示写入权限的某些下拉列表。

在.NET Core中处理此问题的最佳方法是什么。 我已阅读有关添加政策的内容:

 combin[, prop.table(table(GENDER))]
    GENDER
              F        M 
 0.000272 0.232436 0.767292 

  combin[, prop.table(table(ACT_TYPE))]
  ACT_TYPE
     CSA       SA 
  0.710686 0.289314

然后在我的控制器中:

for(i in names(combin)) {
      combin[, prop.table(table(names(combin)[i]))]
}

从哪里获取登录用户的权限,以及如何验证用户是否具有这些权限。

欣赏投入。

1 个答案:

答案 0 :(得分:2)

  

从哪里可以从我的数据库中获取登录用户的权限   如何验证用户是否有这些许可。

在用户通过身份验证后,您将收集用户的声明,并将其存储在身份验证Cookie中。

例如,SignInAsync方法。

public async Task SignInAsync(User user, IList<string> roleNames)
{
    var 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));
    }

    var identity = new ClaimsIdentity(claims, "local", "name", "role");
    var principal = new ClaimsPrincipal(identity);

    await _httpContextAccessor.HttpContext.SignInAsync(
      CookieAuthenticationDefaults.AuthenticationScheme, principal);
}

仅供参考:恰好是我将它们存储为角色声明。如果您不想要,则不必遵循该路线。

然后,您可以验证Startup.cs内的政策。

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        ...
        // Set up policies from claims
        // https://leastprivilege.com/2016/08/21/why-does-my-authorize-attribute-not-work/
        services.AddAuthorization(options =>
        {
            options.AddPolicy(Constants.RoleNames.Administrator, policyBuilder =>
            {
                policyBuilder.RequireAuthenticatedUser()
                    .RequireAssertion(context => context.User.HasClaim(
                        ClaimTypes.Role, Constants.RoleNames.Administrator))
                    .Build();
            });
        });
        ...
    }
}

Usage与您所描述的相同。

[Authorize(Policy = "Read")]
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}