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

时间:2017-05-08 03:12:28

标签: c# token access-token claims-based-identity claims

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

问题:我已经拥有访问令牌访问令牌。如何仅使用访问令牌使用c#代码获取声明?

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

How to get the claims out of a authenticated SecurityToken

How do I read claims from my Oauth token?

1 个答案:

答案 0 :(得分:1)

Install-Package 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库。 e.g。

    app.UseOAuthBearerAuthentication(new OAuthBearerAuthenticationOptions());