我的JWT签名有什么问题?

时间:2017-08-16 17:43:21

标签: c# jwt

我在互联网上看过不同的地方,我还没有看到我的签名与其他实现有何不同:

    string CreateToken(User user)
    {
        var header = new
        {
            typ = "JWT",
            alg = "HS256"
        };
        var claim = new
        {
            iat = ToUnixTime(DateTime.UtcNow),
            jti = Guid.NewGuid(),
            email = user.Email,
            name = user.UserId,
        };

        string headerAndClaim =
            Base64UrlEncode(JsonConvert.SerializeObject(header)) +
            "." +
            Base64UrlEncode(JsonConvert.SerializeObject(claim));

        var key = Encoding.UTF8.GetBytes("MySecret");
        string signature = null;
        using (var signer = new HMACSHA256(key))
        {
            signature = Encoding.UTF8.GetString
                (
                    signer.ComputeHash(Encoding.UTF8.GetBytes(headerAndClaim))
                );

        }

        return
            headerAndClaim +
            "." +
            Base64UrlEncode(signature);
    }

    private static string Base64UrlEncode(string input)
    {
        input = Convert.ToBase64String(Encoding.UTF8.GetBytes(input));
        input = input.Split('=')[0];
        input = input.Replace('+', '-');
        input = input.Replace('/', '_'); 
        return input;
    }

我的调试工具https://jwt.io/

中的有效负载和标头检出功能正常

但我的签名总是无效的,看起来不正确。

我在哪里错了?

0 个答案:

没有答案