1

我已经安装了Thinktecture.IdentityModel.Core包。

假设我已经AuthorizationManagerweb.config文件中注册了我的自定义实现。

public class AuthorizationManager : ClaimsAuthorizationManager {
    public override Boolean CheckAccess(AuthorizationContext context) {
        // authorization implementation
    }
}

在应用程序数据库中为用户角色定义了一个权限。因此,如果它在角色中,它User可能具有Read权限Blogs和资源。ArtsBasicUser

我看到的工作流程:

  1. 在登录时,您进行db 查询以从经过身份验证的用户的所有分配角色中获取所有操作资源对
  2. 那么你必须向身份添加声明(基于数据库查询结果)
  3. ClaimsAuthorizationAttribute打电话给ClaimsAuthorizationManager
  4. ClaimsAuthorizationManager在内部使用步骤 2 中的声明检查身份验证 cookie

我对吗?

还是我应该在CheckAccess方法内进行数据库权限查找?这将在每个请求的基础上工作吗?

我如何将 db 感染的动作资源集转换/附加到身份声明中?

4

1 回答 1

1

在 checkaccess 方法中,您不应该查找数据库。您应该检查 AuthorizationContext 内部的声明是否允许用户访问操作/资源。声明应该在身份验证期间填写。

登录时,您可以从数据库中获取角色并将它们添加到声明中,然后声明可以存储在 cookie 或会话中,以避免在每个请求中获取它们。声明的 Cookie 或 Session 存储使用正确的配置本地(并且安全地)处理。

于 2015-01-27T10:55:56.050 回答