0
我正在C#中使用.NET实现.NET Web API 2。这工作正常,我发送用户名和密码,并返回一个不记名令牌。从持票人令牌web api获取用户数据
现在令牌用于其他API调用,但在每次调用中,我想知道用户数据。这是因为任何应用程序都可以调用Web API,例如从Python代码等,在这种情况下,它只会发送持票人令牌而不是用户名。
我试图挖掘代码,但找不到它。
任何想法都将在这里最受赞赏。
我正在C#中使用.NET实现.NET Web API 2。这工作正常,我发送用户名和密码,并返回一个不记名令牌。从持票人令牌web api获取用户数据
现在令牌用于其他API调用,但在每次调用中,我想知道用户数据。这是因为任何应用程序都可以调用Web API,例如从Python代码等,在这种情况下,它只会发送持票人令牌而不是用户名。
我试图挖掘代码,但找不到它。
任何想法都将在这里最受赞赏。
对此的回答取决于您所处理的不记名令牌的类型。例如,如果这是一个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;
我没有使用JWT,而是使用常规的持票人标记。 – user1144596