如何从令牌中提取并获取声明?

5

请澄清一下:您想要仅通过用户的Bearer令牌在服务器上识别用户的声明吗? - J.N.
是的,那是可能的吗? - choopau
这个怎么样?https://dev59.com/4F8d5IYBdhLWcg3w3FRk - J.N.
是的。我已经尝试在 https://jwt.io/ 中解码我的令牌,其中包括。 - choopau
我在你回答之前编辑了我的上一个评论 - 看看那个评论中的链接,可能会对你有所帮助。 - J.N.
你能访问Request.GetOwinContext().Authentication.User.Claims吗? - user4864425
2个回答

6

安装Newtonsoft.Json软件包

访问令牌只是base64编码的JSON。您可以按以下方式解析令牌。

        string token =
            "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ";
        var parts = token.Split('.');
        var decoded = Convert.FromBase64String(parts[1]);
        var part = Encoding.UTF8.GetString(decoded);
        var jwt = JObject.Parse(part);
        var name = jwt["name"].Value<string>();

更新

  1. 不建议在客户端解析访问令牌,应该只在资源服务器上进行解析。
  2. 您必须在资源服务器上验证访问令牌,以确保令牌在传输过程中未被篡改。
  3. 大多数情况下,您不需要像上面那样解析令牌,只需使用推荐的JWT库进行验证和解析。例如:

    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());


0

rawel提供了一个非常方便的示例!我遇到的一个小问题是命名空间,我不得不使用(只是为了让下一个人更容易找到,因为我还不能发表评论):

using System.Text;
using Newtonsoft.Json.Linq

这并不是真正的问题答案。如果你有不同的问题,你可以点击提问来进行提问。如果你想在此问题有新的回答时得到通知,你可以关注此问题。一旦你获得足够多的声望值,你也可以添加赏金以吸引更多注意力到这个问题。- 来自审核 - Hamed Hajiloo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接