【问题标题】:Get user data from bearer token web api从不记名令牌 web api 获取用户数据
【发布时间】:2016-12-14 05:15:48
【问题描述】:

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

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

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

任何想法都将在这里得到最感激。

【问题讨论】:

    标签: asp.net-web-api2


    【解决方案1】:

    这个问题的答案取决于您处理的是什么类型的不记名令牌。例如,如果这是一个 jwt 令牌,那么它由三个部分组成,由句点分隔:标头、有效负载和签名。要从有效负载中获取用户 ID,您需要对有效负载进行 base-64 解码并获取“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;
    

    【讨论】:

    • 我没有使用 JWT,而是使用常规不记名令牌。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 2014-12-22
    • 2014-07-28
    • 2022-11-17
    • 2021-08-14
    • 2020-06-20
    • 2019-02-11
    相关资源
    最近更新 更多