2016-08-14 92 views
0

我想包裝我的領先地位,使用JWT來保護用C#編寫的WEB API,但是在一些事情上會掛掉。從我的理解流程應該是這樣的:如何在C#WEB API中返回JSON Web令牌?

  1. 客戶端提供用戶名/密碼,從某些客戶端應用程序的Web API(角,.NET,移動等)
  2. 在Web API將驗證用戶名/密碼是正確的,然後生成一個包含用戶角色,信息,到期日期和其他相關信息的JWT(JSON Web令牌)。
  3. JWT被髮送回客戶端應用程序。
  4. 客戶端應用程序掛起到JWT並將其發送給未來的請求。

假設以上是正確的(並且請讓我知道如果不是),我無法理解以下事情。

  1. 一旦Web API驗證了用戶名/密碼並創建了JWT,JWT又會如何傳回?我不知何故將它添加到HttpResponseMessage對象?我似乎無法找到明確的答案。
  2. 客戶端應用程序應該如何通過JWT?這是在JSON數據中,附加到URL,添加到標題?
  3. 我看到很多引用OWIN和OAUTH的教程。這些是什麼,爲什麼我需要它們?我在WEB API使用的數據庫中持有用戶證書和角色。
+1

我敢肯定你會通過標頭(從服務器和服務器)傳遞令牌。客戶需要從頭中獲取該令牌並重新使用它。服務器要在每個請求中查找該標記,並進行需要的任何驗證。 – mariocatch

回答

1

一旦在Web API已經驗證用戶名/密碼,並創建了 智威湯遜,請問JWT獲得通過回?難道我不知何故將它添加到 HttpResponseMessage對象?

常見的做法是成功的,從服務的響應在響應主體在響應頭的狀態代碼200 OK和令牌相關數據

200 OK 
Content-Type: application/json;charset=UTF-8 

{ 
    "access_token": "NgCXRK...MzYjw", 
    "token_type": "Bearer", 
    "expires_at": 1372700873, 
    "refresh_token": "NgAagA...Um_SHo" 
} 

應該如何客戶端應用程序將JWT傳回?這是否在 JSON數據附加到URL,添加到標頭?

使用訪問令牌進行認證的請求

現在,你有一個道理,你可以驗證請求的API。這通過在請求中設置HTTP Authorization標頭或查詢字符串來完成,具體取決於服務器的配置方式。

在頭

Authorization: Bearer NgCXRK...MzYjw  

作爲參數

GET http://localhost:35979/v2/endpoint?access_token=NgCXRK...MzYjw 

我看到很多教程引用OWIN和OAuth的。這些是什麼 以及爲什麼我需要它們?

OWIN - 打開Web界面.NEThttp://owin.org/

OWIN限定.NET Web服務器和Web應用程序 之間的標準接口。 OWIN接口的目標是分離服務器和應用程序,鼓勵爲.NET開發簡單模塊,並且通過成爲一個開放標準來激發.NET Web開發工具的開放源代碼生態系統。

OWIN OAuth 2.0 Authorization Server

的的OAuth 2.0框架使第三方應用程序來獲得有限 訪問HTTP服務。客戶端不是使用資源所有者的 憑據來訪問受保護的資源,而是獲得一個訪問令牌(這是一個表示特定範圍,生命週期, 和其他訪問屬性的字符串)。訪問令牌由授權服務器在獲得資源 所有者的批准後發送給第三方 客戶端。