[英]Claims authorization for specific resources
我正在編寫一個示例文件存儲系統(僅用於stackoverflow的示例)。
我目前的域模型看起來像這樣:
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
不是正確的工具,但希望這說明了問題。
我應該如何連接我的控制器以確保當前登錄的用戶有權訪問特定的操作,更具體地說,某些資源?
我不確定索賠是否是您正在做的事情的正確方法。 你真正想要表示的是權限。 聲明通常表示身份屬性,例如用戶名,電子郵件或其所屬的角色,但不表示權限。 您可以使用聲明來表示權限,但根據應用程序的大小,您可能需要大量權限。 一種典型的方法是將角色映射到一組權限(在您的情況下,添加文件將是一種權限)。 您還可以創建從AuthorizeAttribute派生的自定義授權過濾器,以檢查當前主體是否具有執行操作的正確權限。 該過濾器可能會獲得執行操作作為參數所需的權限。
巴勃羅是對的 - 聲稱描述身份。 您使用該身份來做出授權決定。 有一個名為ClaimsAuthorizationManager的獨立抽象。
看看這里: http : //leastprivilege.com/2012/10/26/using-claims-based-authorization-in-mvc-and-web-api/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.