Я создал грант на расширение делегирования, как они делали в документах. (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 с текущими утверждениями, но не с субъектом, когда он не существует?