【发布时间】:2018-03-21 11:32:32
【问题描述】:
在查看 JwtAuthProviderReader 类时,我注意到在 Audience 属性中配置的受众必须与 JWT 中的 aud 值完全匹配。这有什么具体原因吗?我的 aud 值中有多个值(客户端能够访问多个离散的微服务),并且希望服务器端只关心受众是否包含在该列表中。
来自 Auth0 文档 (https://auth0.com/docs/tokens/id-token)
观众。单个区分大小写的字符串或 URI 或此类值的数组,用于唯一标识此 JWT 的预期接收者。对于 Auth0 颁发的 ID 令牌,这将是您的 Auth0 客户端的客户端 ID。
ServiceStack 源 (https://github.com/ServiceStack/ServiceStack/blob/master/src/ServiceStack/Auth/JwtAuthProviderReader.cs)
public string GetInvalidJwtPayloadError(JsonObject jwtPayload)
{
if (jwtPayload == null)
throw new ArgumentNullException(nameof(jwtPayload));
var expiresAt = GetUnixTime(jwtPayload, "exp");
var secondsSinceEpoch = DateTime.UtcNow.ToUnixTime();
if (secondsSinceEpoch >= expiresAt)
return ErrorMessages.TokenExpired;
if (InvalidateTokensIssuedBefore != null)
{
var issuedAt = GetUnixTime(jwtPayload, "iat");
if (issuedAt == null || issuedAt < InvalidateTokensIssuedBefore.Value.ToUnixTime())
return ErrorMessages.TokenInvalidated;
}
if (jwtPayload.TryGetValue("aud", out var audience))
{
if (audience != Audience)
return "Invalid Audience: " + audience;
}
return null;
}
【问题讨论】:
标签: servicestack