.NET – Làm cách nào để tạo JWT bằng private key?

JWT là gì?

JSON Web Tokens (thường được biết đến với tên gọi JWT) là một tiêu chuẩn mở để truyền dữ liệu giữa máy khách và máy chủ, đồng thời cho phép bạn truyền dữ liệu qua lại giữa máy chủ và người tiêu dùng một cách an toàn.

Làm cách nào để tạo mã thông báo JSON Web Token bằng Private Key?

Tôi đang sử dụng gói PemUtils để đọc private key. Bạn có thể tìm thấy nó ở đây: PemUtils
Chúng tôi cũng cần cài đặt gói JSON Web Token đến từ Microsoft: JsonWebTokens

using PemUtils;
using Microsoft.IdentityModel.JsonWebTokens;
using Microsoft.IdentityModel.Tokens;
string path = Directory.GetCurrentDirectory() + "/Credentials/private.key";
var handler = new JsonWebTokenHandler();
var now = DateTime.UtcNow;
RsaSecurityKey rsaKey;
using (var stream = new StringReader(path))
using (var reader = new PemReader(stream))
{
rsaKey = new RsaSecurityKey(reader.ReadRsaKey());
}
var signingCredentials = new SigningCredentials(rsaKey, SecurityAlgorithms.RsaSsaPssSha256);
var descriptor = new SecurityTokenDescriptor
{
Issuer = "Zodinet Admin",
Audience = "zodinet",
IssuedAt = now,
NotBefore = now,
Expires = now.AddHours(1),
Subject = new ClaimsIdentity(new List { new Claim("sub", "API Authenticator") }),
SigningCredentials = signingCredentials
};
string token = handler.CreateToken(descriptor);

BouncyCastle sử dụng để đọc và phân tích private key từ chuỗi. Bạn có thể tìm thấy nó ở đây: BouncyCastle
Chúng tôi cũng cần cài đặt gói JWT đến từ Microsoft: JsonWebTokens

using Microsoft.IdentityModel.JsonWebTokens;
using Microsoft.IdentityModel.Tokens;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Security;
var handler = new JsonWebTokenHandler();
var now = DateTime.UtcNow;
string pem = //private key string;
PemReader pr = new PemReader(new StringReader(pem));
AsymmetricCipherKeyPair KeyPair = (AsymmetricCipherKeyPair)pr.ReadObject();
RSAParameters rsaParams = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)KeyPair.Private);
var rsaProvider = RSA.Create(2048); //It'll compatible with .NET Core v2.2
rsaProvider.ImportParameters(rsaParams);
var signingKey = new RsaSecurityKey(rsaProvider);
var signingCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.RsaSsaPssSha256);
var descriptor = new SecurityTokenDescriptor
{
Issuer = "Zodinet Admin",
Audience = "zodinet",
IssuedAt = now,
NotBefore = now,
Expires = now.AddHours(1),
Subject = new ClaimsIdentity(new List { new Claim("sub", "API Authenticator") }),
SigningCredentials = signingCredentials
};
string token = handler.CreateToken(descriptor);
 
Liên hệ ngay với Zodinet nếu doanh nghiệp của bạn đang tìm kiếm những giải pháp số hóa tối ưu và chuyên nghiệp.
——–
Hotline: (+84)866.09.02.09
Office: 45 Street 39, Royal Van Phuc, Van Phuc City, Thu Duc

Bài viết liên quan