invalid_grant, когда хэш-пароль идентификации сервера 4 - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть такая конфигурация

public class Config
    {
        public static IEnumerable<Client> GetClients(string[] originUris, string[] redirectUris, int tokenLifetime, int slientRefreshToken)
        {
            return new List<Client>
            {
                new Client
                {
                    ClientId = "eFMS",
                    ClientName = "eFMS Services",
                    AccessTokenLifetime =  tokenLifetime,
                    AllowedGrantTypes = GrantTypes.ResourceOwnerPassword,
                    RequireClientSecret = false,
                    RequireConsent = false,
                    AlwaysSendClientClaims = true,
                    AllowAccessTokensViaBrowser = true,
                    AccessTokenType = AccessTokenType.Jwt,
                    AllowOfflineAccess = true,
                    UpdateAccessTokenClaimsOnRefresh = true,
                    RefreshTokenExpiration = TokenExpiration.Sliding,
                    SlidingRefreshTokenLifetime = slientRefreshToken,
                    RedirectUris = redirectUris,
                    AllowedCorsOrigins= originUris,
                    AlwaysIncludeUserClaimsInIdToken = true,
                    AllowedScopes =
                    {
                        "openid", "profile", "offline_access", "efms_scope"
                    },
                }
            };
        }
        public static IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                new ApiResource("efms_api", "eFMS D&T API")
                {
                    ApiSecrets = { new Secret("secret".Sha256()) }
                }
            };
        }
        public static IEnumerable<IdentityResource> GetIdentityResources()
        {
            return new List<IdentityResource>
            {
                new IdentityResources.OpenId(),
                new IdentityResources.Profile() { Required = true },
                new IdentityResource()
                {
                    Name = "efms_scope",
                    Description = "eFMS D&T API",
                    DisplayName = "eFMS D&T API",
                    UserClaims =
                    {
                        "userId","workplaceId","userName","email"
                    }
                }
            };
        }
    }

, и когда я тестирую почтальона с именем пользователя: admin, пароль: 123456, маркер возврата введите описание изображения здесь

, ноесли я хэширую пароль, результатом будет «invalid_grant», и когда я отлаживаю код, не оправдывайте в Task ValidateAsync (ResourceOwnerPasswordValidationContext context) функцию.Пожалуйста, помогите мне решить эту проблему

1 Ответ

0 голосов
/ 28 сентября 2019

Если вы настраиваете AddTestUser IdentityServer, тогда проверка пароля предоставления ResourceOwnerPassword реализуется в IdentityServer4.Test.TestUserResourceOwnerPasswordValidator, а пароль сравнивается в виде обычного текста ( без хеширования ) в TestUserStore.ValidateCredentials:

    public bool ValidateCredentials(string username, string password)
    {
        var user = FindByUsername(username);
        if (user != null)
        {
            return user.Password.Equals(password);
        }

        return false;
    }

Относительно отладки IdentityServer4.Test.TestUserResourceOwnerPasswordValidator.ValidateAsync(...) сняли ли вы флажок "Включить только мой код":

enter image description here

Если вы используете собственную реализацию IdentityServer4.Validation.IResourceOwnerPasswordValidator тогда нужно ли хешировать пароль, решать вам.

...