将node.js Jwt示例转换为.Net

时间:2018-03-14 01:50:54

标签: asp.net node.js jwt

我正在尝试使用网络API。他们要求我使用Jwt令牌。我试图在天蓝色的asp.net 4.5.2网络应用程序中这样做。我已经下载了Microsoft.IdentityModel.Tokens Nuget包,并希望用它来生成所需的令牌。

我尝试使用的web api在node.js中有一个关于如何生成正确令牌的示例。这是他们的例子:

var jwt = require('jsonwebtoken');

var payload = {
    iss: api_key,
    exp: ((new Date()).getTime() + 5000)
};

//Automatically creates header, and returns JWT
var token = jwt.sign(payload, api_secret);

nuget包的所有示例都比node.js示例中显示的要多得多。像创建秘密价值,声明身份,签署凭证和各种其他东西。

我有api_key值和api_secret值。有人可以告诉我如何使用nuget包做同样的事情,因为他们使用node.js显示了什么?

1 个答案:

答案 0 :(得分:0)

经过一番研究后,我想我有一个解决方案。不幸的是,这是c#中最简单的,但我认为它是一个可以通过的解决方案,因为我们正在谈论苹果和橘子。看起来C#对于选项来说是两倍的冗长,并且没有合理的默认值。

using System;
using System.IdentityModel.Tokens.Jwt;
using Microsoft.IdentityModel.Tokens;


namespace stackoverflow
{
    class Program
    {
        static void Main(string[] args)
        {
            String api_key = "apiKey123123";
            String api_secret = "401b09eab3c013d4ca54922bb802bec8fd5318192b0a75f201d8b3727429090fb337591abd3e44453b954555b7a0812e1081c39b740293f765eae731f5a65ed1";

            var signingKey = Convert.FromBase64String(api_secret);

            JwtHeader jwtHeader = new JwtHeader(
               new SigningCredentials(
                   new SymmetricSecurityKey(signingKey),
                   SecurityAlgorithms.HmacSha256Signature
               )
            );

            JwtPayload jwtPayload = new JwtPayload {
                {"iss", api_key},
                {"exp", ((DateTimeOffset)DateTime.UtcNow).AddMilliseconds(5000).ToUnixTimeMilliseconds() }
            };

            var jwt = new JwtSecurityToken(jwtHeader, jwtPayload);
            var jwtHandler = new JwtSecurityTokenHandler();
            Console.Write(jwtHandler.WriteToken(jwt));

            Console.ReadLine();
        }
    }
}

这个包只有导入:

<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="5.2.1" />