IndentityServer4 - ValidateAsync () не используется для пользовательского типа предоставления - PullRequest
0 голосов
/ 06 января 2019

Я реализовал пользовательский тип предоставления, расширив IExtensionGrantValidator и добавив его в DI, используя .AddExtensionGrantValidator<MyAuthGrant>();. Теперь, когда я отправляю запрос с помощью Почтальона следующим образом:

POST /identity-service/connect/token HTTP/1.1
Host: localhost:4430
Content-Type: application/x-www-form-urlencoded
cache-control: no-cache
Postman-Token: 29db7f3e-b23f-41f2-b5b4-bff2a17981b8
grant_type=my_authtoken=abc123client_id=rp

Я всегда получаю следующую ошибку:

{
    "error": "invalid_grant",
    "error_description": "Missing or Invalid token."
}

Интересно, что конструктор для моего класса MyAuthGrant находится под ударом, а метод ValidateAsync () - нет. Есть идеи, что мне здесь не хватает? Я сделал все как упомянуто здесь: http://docs.identityserver.io/en/dev/topics/extension_grants.html

Обновление: Я даже позволил это для клиента, как

ICollection<string> grantTypes = GrantTypes.ResourceOwnerPassword
    .Concat(new [] { GrantTypeConstants.MyAuth })
    .ToArray();

new Client
{
   ...
   AllowedGrantTypes = grantTypes,
   ...
}

Update2: Вот реализация MyAuthGrant на случай, если кому-то интересно.

namespace Abc
{
    public class MyAuthGrant : IExtensionGrantValidator
    {
        public string GrantType => GrantTypeConstants.MyAuth;

        public MyAuthGrant(
            ...
            )
        {
            ...
        }

        public async Task ValidateAsync(ExtensionGrantValidationContext context)
        {
            try
            {
                ...
                context.Result = new GrantValidationResult(user.Id.ToString(), GrantType);
            }
            catch (Exception ex)
            {
                context.Result = new GrantValidationResult(TokenRequestErrors.UnauthorizedClient);
            }
        }
    }
}
...