Проверьте имя пользователя и пароль в IdentityServer4 в неявном потоке - PullRequest
0 голосов
/ 18 января 2019

Как можно проверить имя пользователя и пароль в потоке Implicit? Я попытался добавить пользовательский IResourceOwnerPasswordValidator валидатор, но он не вызывается, когда я устанавливаю точку останова:

services.AddIdentityServer()
    .AddDeveloperSigningCredential()
    .AddInMemoryApiResources(Config.GetApiResources())
    .AddInMemoryClients(Config.GetClients())
    .AddInMemoryIdentityResources(Config.GetIdentityResources())

    .AddResourceOwnerValidator<ResourceOwnerPasswordValidator>();
    ;

Валидатор:

public class ResourceOwnerPasswordValidator : IResourceOwnerPasswordValidator
{

    public ResourceOwnerPasswordValidator()
    {
    }

    public async Task ValidateAsync(ResourceOwnerPasswordValidationContext context)
    {
        return Task.CompletedTask;
    }
}

Когда я смотрю на исходный код IdentityServer4 в класс TokenRequestValidator, кажется, что IResourceOwnerPasswordValidator валидатор вызывается только в потоке Password.

Когда я пытался добавить IExtensionGrantValidator, который является валидатором по умолчанию (включая Implicit), он также не вызывался.

Как можно проверить имя пользователя и пароль в потоке Implicit?

1 Ответ

0 голосов
/ 18 января 2019

Я только что нашел решение, проверка имени пользователя / пароля не является частью потока авторизации, это делается непосредственно в контроллере страницы входа в систему, в примере 7 это делается в AccountController.

if (ModelState.IsValid)
{
    // validate username/password against in-memory store
    if (_users.ValidateCredentials(model.Username, model.Password))
    {
        ...
    }

Достаточно заменить этот фрагмент кода проверкой в ​​реальном пользовательском хранилище вместо значения по умолчанию TestUserStore.

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