我是Identity Server的新手,对于Identity& amp;访问令牌。我理解访问令牌是为了保护资源(即web api),并且身份令牌用于进行身份验证。但是,每当我调用/ connect / token时,我总会收到“access_token”。在请求中,我要求的客户有各种范围和索赔。
new Client
{
ClientId = "Tetris",
ClientName = "Tetris Web Api",
AccessTokenLifetime = 60*60*24,
AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
RequireClientSecret = false,
AllowedScopes = {"openid", "TetrisApi", "TetrisIdentity"}
}
public static IEnumerable<ApiResource> GetApiResources()
{
return new[]
{
new ApiResource("TetrisApi", "Tetris Web API", new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" })
};
}
public static IEnumerable<IdentityResource> GetIdentityResources()
{
return new List<IdentityResource>
{
new IdentityResources.OpenId(),
new IdentityResources.Profile(),
new IdentityResource
{
Name = "TetrisIdentity",
UserClaims =
new[]
{
JwtClaimTypes.Name,
JwtClaimTypes.Role,
JwtClaimTypes.GivenName,
JwtClaimTypes.FamilyName,
JwtClaimTypes.Email,
"module",
"module.permissions"
}
}
};
}
有什么想法?我没有在Quickstarts中看到使用Identity Tokens的示例。
谢谢!
答案 0 :(得分:1)
密码授予类型不支持身份令牌。参见RFC6749。
您可以在此处做的最好的事情是使用访问令牌来使用userinfo端点获取用户的声明。
建议使用隐式或混合等交互式流程进行最终用户身份验证。
答案 1 :(得分:1)
@leastprivilege的回答是正确的,但您也可以选择在UserClaims
定义中包含所需的ApiResource
,而不是调用userinfo端点。
您提出new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }
请求的那一刻,但如果您将其更改为包含您(当前)定义为IdentityResources
的一部分的所有声明,那么这些声明也将在access_token中提供。< / p>