2017-10-15 158 views
0

我正在爲移動應用程序(android)創建後端Web服務(asp.net核心2.0)。該應用程序的用戶應該只能看到他的項目,並且我想在Web服務中進行檢查。webservice如何檢查用戶是否被允許查看項目?

在我的控制,我有這樣的

[HttpGet("{id}")] 
    public async Task<IActionResult> Get(int id) 
    { 
     var item = _repository.GetItem(id); 
     if (!(await _authorizationService.AuthorizeAsync(User, item, nameof(IsAllowedToSeeRequirement))).Succeeded) 
      return BadRequest(); 
     return new ObjectResult(item); 
    } 

和地方的代碼,有一個IsAllowedToSeeRequirementAuthorizationHandler實現,它的實際檢查:

public class IsAllowedToSeeAuthorizationHandler : AuthorizationHandler<IsAllowedToSeeRequirement, Item> 
{ 
    protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsAllowedToSeeRequirement requirement, Item item) 
    { 
     if (context.User.Identity.Name == item.Owner) 
     { 
      context.Succeed(requirement); 
     } 
     return Task.CompletedTask; 
    } 
} 

到目前爲止,一切都很好,這作品,但它是很多代碼和間接,而不是說魔術字符串(雖然減輕了nameof)...

我可以寫

[HttpGet("{id}")] 
    public IActionResult Get(int id) 
    { 
     var item = _repository.GetItem(id); 
     if (item.Owner != User.Identity.Name) 
      return BadRequest(); 
     return new ObjectResult(item); 
    } 

並跳過需求類,處理程序,註冊處理程序和需求。

在每篇教程中,我都會讀到關於這種東西的東西,總是有這種處理器的東西。所以我認爲這是一種很費力的方式,但是有人可以解釋一下實際情況嗎?

回答

1

你的問題是相當廣泛的,但讓我描述的替代和常用的方法:

要訪問到Web API本身一個具有acquire a token驗證自己。在該令牌中,用戶名/名稱被存儲爲as a claim。當您使用存儲庫訪問數據存儲時,您可以在其中擁有授權表並使用令牌中的用戶憑證加入該表。

查看this blogpost的完整示例。

一些更多的背景材料at the docs

相關問題