我正在尝试使用Web API。他们要求我使用 Jwt 令牌。我正在尝试在 Azure 上的 asp.net 4.5.2 Web 应用程序中执行此操作。我已经下载了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 包的所有示例都比节点.js示例中显示的要多得多。诸如创建机密值,声明身份,签名凭据和各种其他内容之类的事情。
我有api_key值和api_secret值。有人可以告诉我如何使用 nuget 包做与他们使用 node.js 显示的内容相同的事情吗?
经过一些研究,我想我有一个解决方案。不幸的是,这是 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" />