在ASP.NET Core 2.0中将JSON对象作为JWT令牌的声明传递

时间:2019-06-11 16:22:21

标签: c# asp.net-core jwt

是否可以将JSON对象作为JWT令牌或对象列表的声明传递(如下面的示例所示)?

{
  "nickname": [
    {
      "external_nickname": "tomas",
      "internal_nickname": "t_omas"
    }, 
    {
      "external_nickname": "malex",
      "internal_nickname": "alexander014"
    } 
  ]
}

到目前为止,我只能在令牌中传递一个昵称

"nickname" : "tomas"

或者我可以传递一个数组

"nickname" : ["nickname1","nickname2"]

但是这些都不满足我。

编辑:

使用Avin Kavish方法,我在JSON Object中得到了额外的斜线。我不要如何摆脱它们?

 "nickname": "[{\"external_nickname\":\"tomas\",\"internal_nickname\":\"t_omas\"}]"

2 个答案:

答案 0 :(得分:0)

是的,请先对其进行序列化。

var claim = new Claim("nickname", JsonConvert.SerializeObject(nicknames));

要使用昵称,您需要从字符串反序列化为普通的旧对象。

在javascript中,

const nicknames = JSON.Parse(value)

在C#中,

var nicknames = JsonConvert.DeserializeObject<T>(value) // <-- where T is your type

答案 1 :(得分:0)

我使用 JWT NuGet 包。

Install-Package JWT 

代码:

        var payload = new
        {
            nickname = new[]
            {
                new {external_nickname = "tomas", internal_nickname = "t_omas"},
                new {external_nickname = "malex", internal_nickname = "alexander014"}
            }
        };
        
        var encoder = new JwtEncoder(new HMACSHA256Algorithm(), new JsonNetSerializer(), new JwtBase64UrlEncoder());
        var token = encoder.Encode(payload, "your_secret");