您如何在 IdentityServerr4 中请求身份令牌 (id_token)
How do you request an Identity Token (id_token) in IdentityServerr4
我是 Identity Server 的新手,对身份和访问令牌的主题感到困惑。我了解访问令牌旨在保护资源(即 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"
}
}
};
}
下面是邮递员的副本:
有什么想法吗?我在快速入门中没有看到使用身份令牌的示例。
谢谢!
密码授予类型不支持身份令牌。请参阅 RFC6749。
您在这里可以做的最好的事情是使用访问令牌来为使用 userinfo 端点的用户获取声明。
建议对 end-user 身份验证使用隐式或混合式等交互式流程。
@leastprivilege 的回答是正确的,但不是调用 userinfo 端点,您还可以选择在 ApiResource
定义中包含您想要的 UserClaims
。
此时您请求 new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }
,但如果您将其更改为包括您(当前)定义为 IdentityResources
一部分的所有声明,那么这些声明也将在 access_token.
我是 Identity Server 的新手,对身份和访问令牌的主题感到困惑。我了解访问令牌旨在保护资源(即 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"
}
}
};
}
下面是邮递员的副本:
有什么想法吗?我在快速入门中没有看到使用身份令牌的示例。
谢谢!
密码授予类型不支持身份令牌。请参阅 RFC6749。
您在这里可以做的最好的事情是使用访问令牌来为使用 userinfo 端点的用户获取声明。
建议对 end-user 身份验证使用隐式或混合式等交互式流程。
@leastprivilege 的回答是正确的,但不是调用 userinfo 端点,您还可以选择在 ApiResource
定义中包含您想要的 UserClaims
。
此时您请求 new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }
,但如果您将其更改为包括您(当前)定义为 IdentityResources
一部分的所有声明,那么这些声明也将在 access_token.