【问题标题】:Passing JSON Object as a claim of JWT Token in ASP.NET Core 2.0在 ASP.NET Core 2.0 中将 JSON 对象作为 JWT 令牌的声明传递
【发布时间】:2019-10-26 03:07:03
【问题描述】:

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

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

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

"nickname" : "tomas"

或者我可以传递一个数组

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

但这些都不能让我满意。

编辑:

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

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

【问题讨论】:

  • 那些在客户端吗?
  • 是的,他们是..
  • 在 javascript 中,JSON.Parse(value)。在 c# JsonConvert.DeserializeObject<T>(value) 中,T 是你的类型
  • stackoverflow.com/questions/28325107/… 你可以写一个比使用 JSON.Net JsonTextWriter.QuoteChar 的方法
  • 这应该不是问题,因为反序列化会删除反斜杠。

标签: c# asp.net-core jwt


【解决方案1】:

我使用 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");

【讨论】:

    【解决方案2】:

    是的,先序列化吧。

    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
    

    【讨论】:

    • 使用您的方法在 JWT 令牌中存在斜线。你知道怎么解决吗?
    • 我认为斜线非常适合转义序列化对象中的双引号,您不能在使用声明时删除它们,例如。来自您的客户?
    猜你喜欢
    • 2018-06-16
    • 2018-07-01
    • 2018-03-30
    • 2019-01-21
    • 2023-03-23
    • 2021-04-30
    • 2018-05-08
    • 2019-06-03
    • 2018-11-03
    相关资源
    最近更新 更多