这个问题通常是由于 JWT 令牌中的角色声明被解析为字符串而不是数组而导致的。这可以通过以下方法解决:
确保您的 Keycloak 配置正确。检查您的角色声明是否以数组形式返回。
在您的客户端代码中,将角色声明转换为数组。例如,使用以下代码:
var roleArray = token.Claims.Where(x => x.Type == "role").Select(x => x.Value).ToArray();
You have access
可以改变为:
@if (roleArray.Intersect(((IEnumerable)context.User.Roles).ToArray()).Any())
{
You have access
}
这样将确保您的应用程序能够正确解析角色声明,并将它们用作角色授权的依据。