Идентификационный сервер 4. Утверждения ресурса идентификации в потоке паролей владельца ресурса - PullRequest
0 голосов
/ 07 апреля 2020

Я использую пароль владельца ресурса большого типа. Я реализовал 2 интерфейса: IResourceOwnerPasswordValidator и IProfileService. Когда я запрашиваю токен, я попадаю на ResourceOwnerPasswordValidator, после успешной проверки я ожидаю, что ProfileService предоставляет мне запрошенные климы. Но это никогда не происходит.

Дело в том, что RequestedClaimTypes из ProfileDataRequestContext в ProfileService всегда пусто, в результате я не могу отфильтровать претензии, которые не были заданы. Я ожидаю, что он содержит все претензии, связанные с запрошенными областями. Например, если я запрашиваю такие области как email или "profile", я ожидаю, что такие заявки, как "email", "first_name", "preferred_username" и другие, будут в списке RequestedClaimTypes. Существует простая конфигурация клиентов и ресурсов идентификации:

            return new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Profile(),
                new IdentityResources.Email()
            };

  ...........................................................................

            new Client
            {
                ClientId = "client",
                ClientName = "SomeClient",
                ClientSecrets = { new Secret("secret".Sha256()) },

                AllowOfflineAccess = true,
                UpdateAccessTokenClaimsOnRefresh = true,
                RefreshTokenUsage = TokenUsage.ReUse,
                SlidingRefreshTokenLifetime = 1200,
                RefreshTokenExpiration = TokenExpiration.Sliding,

                AccessTokenLifetime = 900,
                IdentityTokenLifetime = 120,
                AllowedGrantTypes = { GrantType.ResourceOwnerPassword },
                AccessTokenType = AccessTokenType.Jwt,

                AllowedScopes =
                {
                    IdentityServerConstants.StandardScopes.OpenId,
                    IdentityServerConstants.StandardScopes.Profile,
                    IdentityServerConstants.StandardScopes.Email
                }
            },

Интересным фактом является то, что RequextedResource из ProfileDataRequestContext имеет данные о претензиях, которые я могу использовать, чтобы выяснить, какие претензии запрашивал пользователь. Например:

            var claimsNames = new List<string>();
            claimsNames.AddRange(context.RequestedResources.IdentityResources.SelectMany(r => r.UserClaims));
            claimsNames.AddRange(context.RequestedResources.ApiResources.SelectMany(r => r.UserClaims));
            context.RequestedClaimTypes = claimsNames;

Но, похоже, это хакерский путь. Кто-нибудь знает, почему RequestedClaimTypes не заполняется автоматически?

PS Клиент - почтальон со следующими параметрами enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...