Добавить пользовательское утверждение для создания токена — сервер идентификации Duende

Я пытаюсь настроить свой сервер идентификации Duende (ранее известный как сервер идентификации 4) для аутентификации и авторизации. Что касается аутентификации, я использую внешнюю службу аутентификации, и в результате я получаю UserID . Затем я хочу добавить этот идентификатор пользователя в качестве пользовательского утверждения в свой токен доступа. Однако я не могу понять, как это делается.

В частности, я хочу реализовать что-то вроде этого:

      // Client/program.cs

var client = new HttpClient();

var tokenResponse = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest
{
    Address = https://localhost:5001/connect/token,
    ClientId = "1",
    ClientSecret = "secret",
    Scope = "api1",
    UserID = UserID // here is the problem. It creates the correct access token without this line
});

Проблема в том, что UserID не определен как часть RequestClientCredentialsTokenAsync .

Есть ли способ добавить его?

Заранее спасибо.

2 ответа

ClientCredentials Flow не предполагает никакого взаимодействия с пользователем, так как не будет никаких данных, связанных с зарегистрированными пользователями.

Вы можете использовать устаревший поток ResourceOwnerPassword , который использует имя пользователя и пароль для проверки подлинности. Ваш текущий подход связан с взаимодействием между серверами.

Вы не сможете отправлять какие-либо пользовательские параметры, используя учетные данные клиента.

Вместо этого вы можете создать собственное разрешение для своего сценария, используя интерфейс IExtensionGrantValidator.

Вы можете отправить дополнительные параметры с помощью RequestTokenAsync.

      var client = new HttpClient();
var response = await client.RequestTokenAsync(new TokenRequest
  {
      Address = "https://identityUrl/connect/token",
      GrantType = "customgrant",
      ClientId = "clientid",
      ClientSecret = "secret",
      Parameters = 
  {
    { "customParameter", "custom value"},
    { "scope", "api1" }
}
 });

Дополнительную информацию можно найти в этом документе. Предоставление расширения в Identity Server.

Другие вопросы по тегам