Предоставление расширения Identity Server 4 без субъекта - PullRequest
0 голосов
/ 09 марта 2020

Я создал грант на расширение делегирования, как они делали в документах. (https://identityserver4.readthedocs.io/en/latest/topics/extension_grants.html)

В этом примере они получают идентификационные данные пользователя из заявок и возвращают результат проверки гранта следующим образом:

var sub = result.Claims.FirstOrDefault(c => c.Type == "sub").Value;

context.Result = new GrantValidationResult(sub, GrantType);

Моя проблема что у меня не всегда есть личность пользователя, когда мне нужно использовать грант делегирования. В моем сценарии у меня есть приложение, слушающее сообщения. Когда приложение получает сообщение, оно вызывает API с помощью client_credentials. Затем этот API вызывает вспомогательный API с использованием типа предоставления делегирования. Поскольку приложение использует client_credentials, в утверждениях нет «sub».

Я попытался проверить, существует ли утверждение «sub», и если нет, установить для объекта GrantValidationResult «магический» указатель, который FindByIdAsyn c IUserStore будет искать и либо возвращать ноль, либо новый пустой TUser. В обоих случаях это приводит к тому, что Microsoft.AspNetCore.Identity будет бомбить дальше по конвейеру.

Как я могу вернуть GrantValidationResult с текущими утверждениями, но не с субъектом, когда он не существует?

1 Ответ

0 голосов
/ 09 марта 2020

Я нашел это переопределение для GrantValidationResult.

// Summary:
//     Initializes a new instance of the IdentityServer4.Validation.GrantValidationResult
//     class with no subject. Warning: the resulting access token will only contain
//     the client identity.
public GrantValidationResult(Dictionary<string, object> customResponse = null);

Так как у меня нет никаких пользовательских ответов, если "sub" является нулем, тогда я делаю это:

context.Result = new GrantValidationResult(new Dictionary<string, object>());

При таком способе заявки по-прежнему заполняются запрошенными / проверенными областями.

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