从持有人令牌web api

时间:2016-08-08 12:18:24

标签: asp.net-web-api2

我正在使用C#实现.NET Web API 2。这很好用,我发送用户名和密码,然后返回一个不记名令牌。

现在令牌用于其他API调用,但在每次调用中我都想知道用户数据。这是因为任何应用程序都可以调用Web API,例如来自python代码等,在这种情况下,它只会发送不记名令牌但不会发送用户名。

我试图挖掘代码但无法找到它。

任何想法都会在这里得到最多的赞赏。

1 个答案:

答案 0 :(得分:0)

答案取决于您正在处理的持票人令牌类型。例如,如果这是一个jwt令牌,那么它由一个由句点分隔的三个部分组成:标题,有效负载和签名。要从有效负载中获取用户标识,您需要对有效负载进行base-64解码并获取“sub”属性。 'sub'被称为'声明'。令牌包含许多声明,但“sub”通常存储用户ID。有关详细信息,请参阅此处:https://jwt.io/introduction/

在C#中,您可以使用String.Split()解析令牌的有效负载,然后base 64解码有效负载,如下所示:

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

从那里,您只需要将有效负载反序列化为与您期望的格式匹配的对象:

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

最后,您的用户ID应该是您的jwt令牌对象的属性:

var userId = tokenPayloadObj.UserId;