2016-08-08 42 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

相关问题