2016-08-08 43 views
0

我正在C#中使用.NET實現.NET Web API 2。這工作正常,我發送用戶名和密碼,並返回一個不記名令牌。從持票人令牌web api獲取用戶數據

現在令牌用於其他API調用,但在每次調用中,我想知道用戶數據。這是因爲任何應用程序都可以調用Web API,例如從Python代碼等,在這種情況下,它只會發送持票人令牌而不是用戶名。

我試圖挖掘代碼,但找不到它。

任何想法都將在這裏最受讚賞。

回答

0

對此的回答取決於您所處理的不記名令牌的類型。例如,如果這是一個jwt令牌,那麼它由三部分組成:一個句點:頭部,有效載荷和簽名。要從有效載荷中獲取用戶標識,您需要base-64解碼有效載荷並獲取「sub」屬性。 'sub'被稱爲'索賠'。令牌包含很多聲明,但'sub'通常存儲用戶標識。對於更多的細節,請參閱此:https://jwt.io/introduction/

在C#中,可以解析出使用String.Split(令牌的有效載荷),然後底座64解碼這樣的有效載荷:

var payload = Encoding.UTF8.GetString(TextEncodings.Base64Url.Decode(b64Payload)); 

從那裏,你只需要有效載荷反序列化到一個對象,你希望的格式相匹配:

var tokenPayloadObj = JsonConvert.DeserializeObject<YourJwtObjectHere>(payload); 

最後,你的用戶ID應該是你的智威湯遜標記對象的屬性:

var userId = tokenPayloadObj.UserId; 
+0

我沒有使用JWT,而是使用常規的持票人標記。 – user1144596

相關問題