索赔授权特定资源(Claims authorization for specific resourc

2019-09-01 16:36发布

我写一个例子文件存储系统(例如只是计算器)。

我现在的域模型看起来像这样:

public class User
{
    public int ID { get; set; }
    public string LoginIdentifier { get; set; }
    public string Password { get; set; }
}

public class File
{
    public int ID { get; set; }
    public int UserID { get; set; }
    public string FileName { get; set; }
    public byte[] Data { get; set; }
}

该代码我写创建的IPrincipal:

private static IPrincipal CreatePrincipal(User user)
{
    Debug.Assert(user != null);

    var identity = new GenericIdentity(user.LoginIdentifier, "Basic");

    // TODO: add claims
            identity.AddClaim(new Claim("Files", "Add"));

    return new GenericPrincipal(identity, new[] { "User" });
}

在我的系统中,用户可以添加文件,他们还可以检索,删除和更新它们,但是,告诫这是一个用户只能检索和修改自己的文件(其中File.UserID应该匹配记录的身份用户)。

我的文件控制器如下所示。

[Authorize]
public class FilesController : ApiController
{
    private readonly FileRepository _fileRepository = new FileRepository();

    public void Post(File file)
    {
        // not sure what to do here (...pseudo code...)
        if (!CheckClaim("Files", "Add"))
        {
            throw new HttpError(HttpStatusCode.Forbidden);
        }

        // ... add the file
        file.UserID = CurrentPrincipal.UserID; // more pseudo code...

        _fileRepository.Add(file);
    }

    public File Get(int id)
    {
        var file = _fileRepository.Get(id);

        // not sure what to do here (...pseudo code...)
        if (!CheckClaim("UserID", file.UserID))
        {
            throw new HttpError(HttpStatusCode.Forbidden);
        }

        return file;
    }
}

也许使用Claim s是不是为工作的工具,但希望这能说明问题。

我应该如何线了我的控制器,以确保当前登录的用户可以访问做具体的行动和更具体的,特定的资源?

Answer 1:

我不知道,如果索赔是你在做什么是正确的做法。 你真的想代表什么权限。 一位自称典型代表的身份属性,如用户名,电子邮件或者属于角色,但没有权限。 你可以表示与要求的权限,但您可能需要吨,这取决于你的应用程序有多大。 一个典型的方法是映射一个角色一组权限(在你的情况下,添加文件将是一个权限)。 您还可以创建自定义过滤器的授权从AuthorizeAttribute派生来检查当前主要有正确的权限来执行操作。 该过滤器可能会收到执行行动的参数所需的权限。



Answer 2:

巴勃罗是正确的 - 权利要求说明身份。 您使用的身份来授权决定,但。 没有为调用ClaimsAuthorizationManager一个单独的抽象。

看看这里: http://leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/



文章来源: Claims authorization for specific resources