【问题标题】:C# .net Core JWT Token Get valuesC# .net Core JWT Token 获取值
【发布时间】:2018-11-28 00:39:17
【问题描述】:

我有一些来自JwtSecurityTokenClaim 看起来像这样:

{  
   "profile":{  
      "roles":{  
         "Rolename":{  
            "Type":27
         }
      }
   }
}

我需要获取价值Type(现在是 27)

Rolename 它是角色的名称 - 它可以不同(并且可以有多个角色)

对我来说任务是获取角色名称并获取Type的值

我是怎么做的:

JwtSecurityTokenHandler handler = new JwtSecurityTokenHandler();
JwtSecurityToken tokenS = handler.ReadToken(token) as JwtSecurityToken;
string profile = tokenS.Claims.First(claim => claim.Type == "profile").Value;
JObject o = JObject.Parse(profile);
string cardType = o.SelectToken("$.roles." + "Rolename" + ".Type").ToString();

效果很好,但我不知道如何取角色名以及当我将拥有多个角色时如何成为

【问题讨论】:

  • 如果我是你,我会把“角色”变成一个数组。

标签: c# .net-core jwt


【解决方案1】:

如果总是有一个角色,您可以这样做:

JObject o = JObject.Parse(profile);
var role = ((JObject)o["roles"]).Properties().First();

string roleName = role.Name;

int cardType = (int)role.Value["Type"];

如果可以有多个角色,您可以像这样遍历 JProperty 数组:

var roles = ((JObject)o["roles"]).Properties();
foreach (var role in roles)
{
    string roleName = role.Name;

    int cardType = (int)role.Value["Type"];
}

【讨论】:

  • 这是一个很好的答案,但我不能改变令牌的结构,我需要使用现有的东西
  • 我也更新了你的答案。因为profile = {"roles":{"Rolename":{"Type":27}}}. 内部配置文件没有结构["profile"]。在运行时是 NullReferenceException。我只删除了["profile"],现在一切正常。真的谢谢你
【解决方案2】:

复数形式的角色应该是一个数组。 然后,您可以通过循环以您想要的方式获取该数组中的所有值。 示例:

var roleTypes = new List<string>();
foreach (var role in profile.roles)
{
    //populate a list
}

【讨论】:

  • 复数形式的角色应该是一个数组 - 请显示示例
  • @Igor JSON arrays(为了完整起见:JSON objects
  • @john 输入角色取决于角色并且必须在角色中 - 请展示它的外观
  • 你的意思是当你有这样的东西时: { "profile":{ "roles":[ { "Rolename1":{ "Type":27 } }, { "Rolename2":{ "类型":28 } }] } }
  • @Phael 我认为他的意思是{"profile":{"roles":{"Rolename":{"Type":27},"Rolename2":{"Type":1923892}}}} .... 或者不是。谁知道?问题不清楚。
猜你喜欢
  • 2021-04-16
  • 2018-02-20
  • 2018-03-24
  • 2016-12-02
  • 2018-03-04
  • 2021-02-26
  • 2018-12-22
  • 2021-01-17
  • 2019-11-11
相关资源
最近更新 更多