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

use*_*948 4 c# token claims-based-identity claims access-token

我一直在寻找一个确切的答案,但似乎大多数答案都是客户端调用并且超出了范围。

问题:我已经有一个访问令牌访问令牌。仅在给定访问令牌的情况下,如何使用 c# 代码获得声明?

我认为:以下是相同的问题,但没有我认为合适的答案。

如何从经过身份验证的 SecurityToken 中获取声明

如何从我的 Oauth 令牌中读取声明?

raw*_*wel 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>();
Run Code Online (Sandbox Code Playgroud)

更新

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

    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());