溫馨提示×

c# jwtbuilder如何設置密鑰

c#
小樊
123
2024-12-12 21:56:13
欄目: 編程語言

在C#中,使用System.IdentityModel.Tokens.Jwt庫創建JWT時,需要設置密鑰。以下是一個簡單的示例,展示了如何使用JwtSecurityTokenBuilder設置密鑰:

首先,確保已安裝System.IdentityModel.Tokens.Jwt庫。如果尚未安裝,請在項目中運行以下命令:

dotnet add package System.IdentityModel.Tokens.Jwt

然后,創建一個C#類并編寫以下代碼:

using System;
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;

public class JwtTokenBuilder
{
    public static string CreateJwtToken(string issuer, string audience, string secretKey, int expirationMinutes)
    {
        var claims = new[]
        {
            new Claim(ClaimTypes.Name, "John Doe"),
            new Claim(ClaimTypes.Email, "john.doe@example.com")
        };

        var key = Encoding.UTF8.GetBytes(secretKey);

        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(claims),
            Expires = DateTime.UtcNow.AddMinutes(expirationMinutes),
            SigningCredentials = new SigningCredentials(new SymmetricSecurityKey(key), SecurityAlgorithms.HmacSha256Signature)
        };

        var token = new JwtSecurityToken(issuer, audience, tokenDescriptor);

        return new JwtSecurityTokenHandler().WriteToken(token);
    }
}

在這個示例中,我們創建了一個名為JwtTokenBuilder的類,其中包含一個名為CreateJwtToken的靜態方法。該方法接受以下參數:

  • issuer:頒發者(例如,“https://example.com”)。
  • audience:接收者(例如,“https://example.com/api”)。
  • secretKey:用于簽名和驗證JWT的密鑰(例如,“your-256-bit-secret”)。
  • expirationMinutes:JWT的過期時間(例如,30分鐘)。

在方法內部,我們創建了一個包含一些聲明(例如,用戶名和電子郵件地址)的Claim數組。然后,我們將密鑰轉換為字節數組,并使用它創建一個SymmetricSecurityKey。接下來,我們創建一個SecurityTokenDescriptor,并將其簽名憑據設置為使用SymmetricSecurityKeyHmacSha256Signature算法。最后,我們使用JwtSecurityTokenHandler生成JWT并將其返回給調用者。

要使用此方法創建JWT,只需調用它并傳入適當的參數即可:

string issuer = "https://example.com";
string audience = "https://example.com/api";
string secretKey = "your-256-bit-secret";
int expirationMinutes = 30;

string jwtToken = JwtTokenBuilder.CreateJwtToken(issuer, audience, secretKey, expirationMinutes);
Console.WriteLine(jwtToken);

這將生成一個包含聲明和過期時間的JWT,并使用指定的密鑰進行簽名。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女