Google Code Prettify

JWT 的 Issuer 什麼作用?

JWT (JSON Web Token) 的 issuer (簡稱為 iss) 是 JWT 標頭和有效載荷中的一部分,用於指
示 JWT 的發行者。這是一個可選的聲明,但在很多情況下它被用來幫助驗證和識別令牌的來源。以
下是 issuer 的主要作用和設置方式:


主要作用
標識發行者:iss 聲明用來標識誰發行了這個令牌。這可以是發行令牌的認證伺服器的 URL 或名稱。
驗證令牌來源:在驗證令牌時,服務可以檢查令牌的 iss 聲明,以確保令牌是從可信任的發行者那裡
來的,從而防止來自未知或不受信任的來源的攻擊。

實現多租戶支持:在多租戶系統中,不同租戶可以有不同的發行者。通過檢查 iss,系統可以識別和
分離不同租戶的令牌。

設置 issuer
在生成 JWT 時,你需要設置 issuer。例如,如果你使用 System.IdentityModel.Tokens.Jwt 
庫來生成 JWT,設定 issuer 的方式如下:


csharp

var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256);

var tokenDescriptor = new SecurityTokenDescriptor
{
    Subject = new ClaimsIdentity(new[]
    {
        new Claim(JwtRegisteredClaimNames.Sub, "user_id"),
        new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
    }),
    Expires = DateTime.UtcNow.AddHours(1),
    Issuer = "your_issuer", // 設定發行者
    Audience = "your_audience",
    SigningCredentials = credentials
};

var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateToken(tokenDescriptor);
var jwtToken = tokenHandler.WriteToken(token);

Console.WriteLine(jwtToken);

驗證 issuer
在驗證 JWT 時,你也需要檢查 issuer。這可以通過設定 TokenValidationParameters 來實現:

csharp

var tokenHandler = new JwtSecurityTokenHandler();
var validationParameters = new TokenValidationParameters
{
    ValidateIssuer = true, // 啟用發行者驗證
    ValidIssuer = "your_issuer", // 預期的發行者
    ValidateAudience = true,
    ValidAudience = "your_audience",
    ValidateLifetime = true,
    IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("your_secret_key"))
};

try
{
    var principal = tokenHandler.ValidateToken(jwtToken, validationParameters, out SecurityToken validatedToken);
    // Token 驗證成功,principal 包含了用戶的身份信息
}
catch (SecurityTokenException ex)
{
    // Token 驗證失敗
    Console.WriteLine(ex.Message);
}


總結
JWT 中的 issuer (iss) 聲明用來標識令牌的發行者,並在令牌驗證過程中幫助確認令牌的來
源是否合法和可信。設置和驗證 issuer 是確保 JWT 安全性的重要步驟,特別是在多租戶環境
和需要高安全性的應用中。