2017-09-05 88 views
3

我正在使用預先安裝的Visual Studio解決方案開發我的第一個OAuth解決方案之一。OAuth用戶認證與服務器認證和訪問層相結合

我的身份驗證工作正常,當客戶端撥打/token時,他們會得到一個不記名令牌,並且一切正常。該令牌是一個「用戶級別」令牌,您可以在對服務器的每個請求中看到該令牌。這意味着我可以在只有用戶應該訪問的端點上添加[Authorize]

但是,與此同時,我也希望我的服務器應用程序具有「完全訪問權限」。他們需要能夠獲得跨多個用戶的列表,刪除事物等等。

這裏來我的問題,我以爲可以很輕鬆地回答起來:(?API令牌)

  1. 你如何永久性標記一起管理這兩個短暫的令牌(?承載令牌)
  2. 我如何在訪問級別上有所不同,所以有些方法需要永久令牌?
  3. 如何在相同的方法訪問級別(即典型的GET方法,當用戶只應該得到「他的項目」,而管理員令牌可以得到「全」)

大概是超級簡單的區別 - 而且很可能我只是不知道要在Google上搜索哪些關鍵字!

回答

1

這可能會被視爲簡單,但它涉及到很多在它的概念,將證明他們中的一些從你的問題:(?承載令牌)

1.How你同時管理短命令牌一起永久性標記(API令牌?)

一般一個網絡API項目可以作爲承載令牌的認證機制,但它不支持高級授權場景,如你問,所以爲了適合那些需要那麼你需要使用Customization of Identity model and implementation of the authorization based on the role

2.如何區分訪問級別,所以有些方法需要永久令牌?

你需要創建一個Rolemanager類,你需要將它添加到Owin Context現在在Authorize可以修改屬性脫俗的角色如下[Authorize(Roles="Admin")]

3.How做我訪問級別不同,所以有些方法需要永久令牌?

您需要根據Role創建一個自定義的邏輯,使得用戶無論是Admin與否,並根據您可以創建permanent token對於誰是有管理權限的人。我希望我的第二點解釋也可以回答這個問題

4.如何在同一方法(即,典型的GET方法,當用戶只應該得到「他的項目」,而令牌 管理員可以得到「全」)

基於角色的,你可以得到的all的用戶列表或Single用戶 這裏您的理解僞代碼

if (userManager.IsInRole(user.Id, "Admin")) { 

    // this roles is authorized to get the All records 

    } 
else{ 

    // Send a single record ... 
} 
+0

很好的答案 - 儘管整個事情比我想象的要複雜得多!謝謝 :-) –