【问题标题】:How to create signature for my JWT?如何为我的 JWT 创建签名?
【发布时间】:2016-07-01 10:18:45
【问题描述】:

根据JWT(特别是使用Box.com api),您需要

  1. 创建您的标头和声明,使用 base 64 url​​ 对它们进行编码,并用点将它们连接起来。

  2. You then need to take that and the secret key (a little confusion here, more on that in a second) and then encrypt them。对于 Box.com,它将使用 RS256。

  3. 然后您将其发送给提供商(在本例中为 Box.com),一切都应该很好。

第 1 步没问题。

第 2 步对我来说有点问题。

  1. 我假设我使用我的……私钥?编辑:不,私钥是用来解密的。

  2. 尽管有太多使用 HSA 执行此操作的示例,但我需要使用 RSA,并且 System.IdentityModel.Tokens.JWT_stuff 流程并没有提供帮助。如果 Box.com 允许 HSA256,我还可以使用其他几个包和库。

我查看了this question,但并没有非常有用。

那么我需要做什么才能完成第 2 步?换句话说:如何在 C# 中使用 RSA256 进行加密?

【问题讨论】:

    标签: c# encryption jwt box


    【解决方案1】:

    快速查看Box.com's developer page 指向 GitHub 上的Box .NET SDK by Box Mobile Team,那里有一个BoxJWTAuth.cs 和一些代码,您可以查看他们在哪里使用 RSA。

    甚至还有一个Box.V2.Samples.JWTAuth/Program.cs,他们会在其中展示如何使用它。

    在检查 BoxJWTAuth 时,我看到了这个 sn-p 代码

    private string ConstructJWTAssertion(string sub, string boxSubType)
    {
        byte[] randomNumber = new byte[64];
        using (var rng = new RNGCryptoServiceProvider())
        {
            rng.GetBytes(randomNumber);
        }
    
        var claims = new List<Claim>{
            new Claim("sub", sub),
            new Claim("box_sub_type", boxSubType),
            new Claim("jti", Convert.ToBase64String(randomNumber)),
        };
    
        var payload = new JwtPayload(this.boxConfig.ClientId, AUTH_URL, claims, null, DateTime.UtcNow.AddSeconds(30));
    
        var header = new JwtHeader(signingCredentials: this.credentials);
        if (this.boxConfig.JWTPublicKeyId != null)
            header.Add("kid", this.boxConfig.JWTPublicKeyId);
    
        var token = new JwtSecurityToken(header, payload);
        var tokenHandler = new JwtSecurityTokenHandler();
        string assertion = tokenHandler.WriteToken(token);
        return assertion;
    }
    

    希望这会有所帮助。

    【讨论】:

    • 确实如此。我很难在他们的 sdk 中导航,因为由于我不在 Windows 8/8.1 上,因此无法加载几个项目。这使得实现它们的对象和跟踪代码变得比需要的更困难,因为,嘿,我无法运行它。但是看到这一点告诉我,我最终尝试做的事情是正确的。这给了我我所缺少的框架。竖起大拇指,伙计!谢谢。
    • 没问题。很乐意提供帮助。
    猜你喜欢
    • 2019-12-12
    • 2019-11-20
    • 1970-01-01
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2021-09-13
    • 2017-03-20
    相关资源
    最近更新 更多