Грант на расширение Identity Server 4 без темы

Я создал грант на расширение делегирования, как они это делали в документации. (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».

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

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


person ScubaSteve    schedule 09.03.2020    source источник


Ответы (1)


Я нашел это переопределение для 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" имеет значение null, я делаю следующее:

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

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

person ScubaSteve    schedule 09.03.2020