您如何在IdentityServerr4中请求身份令牌(id_token)

时间:2017-02-08 21:20:18

标签: identityserver4

我是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"
                        }
                }
            };
        }

以下是邮递员的副本: enter image description here

有什么想法?我没有在Quickstarts中看到使用Identity Tokens的示例。

谢谢!

2 个答案:

答案 0 :(得分:1)

密码授予类型不支持身份令牌。参见RFC6749。

您可以在此处做的最好的事情是使用访问令牌来使用userinfo端点获取用户的声明。

建议使用隐式或混合等交互式流程进行最终用户身份验证。

答案 1 :(得分:1)

@leastprivilege的回答是正确的,但您也可以选择在UserClaims定义中包含所需的ApiResource,而不是调用userinfo端点。

您提出new[] { JwtClaimTypes.Name, JwtClaimTypes.Role, "module" }请求的那一刻,但如果您将其更改为包含您(当前)定义为IdentityResources的一部分的所有声明,那么这些声明也将在access_token中提供。< / p>