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 安全性的重要步驟,特別是在多租戶環境
和需要高安全性的應用中。