Я реализовал пользовательский тип предоставления, расширив 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);
}
}
}
}