您如何在 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.