IdentityServer4 - проблема с авторизацией DeviceFlow - PullRequest
0 голосов
/ 07 марта 2019

У меня проблема с настройкой авторизации потока устройств с помощью IdentityServer4.Итак, у меня есть созданный клиент со следующими свойствами

new Client
{
    ClientId = "XXXXXXXXXXXXXX",
    ClientName = "XXXXXXXXXXXXXX",
    AllowedGrantTypes = GrantTypes.DeviceFlow,
    AccessTokenType = AccessTokenType.Jwt,
    ClientSecrets = new List<Secret> 
    { 
        new Secret("XXXXXXXXXXXXXX".Sha256()) 
    },
    AllowedScopes = new List<string>
    {
        "XXXXXX"
    },
    Enabled = true,
    AllowAccessTokensViaBrowser = true
}

Затем с устройства я выполняю следующий запрос (запросы взяты из примера здесь ):

POST /device_authorization HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded

client_id=459691054427

Что возвращает следующее:

HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
  "device_code":"GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8",
  "user_code":"WDJB-MJHT",
  "verification_uri":"https://www.example.com/device",
   "verification_uri_complete":"https://www.example.com/device?user_code=WDJB-MJHT",
  "expires_in": 1800,
  "interval": 5
}

После этого я продолжаю опросить устройство на сервере авторизации, который отвечает:

authorization_pending

Затем от пользователя Iотправляю следующий запрос для авторизации устройства:

POST
https://XXXXXXXXX/device/userCode

с заголовком авторизации, содержащим:

Bearer token_value

зарегистрированного пользователя из другого клиентского приложения.

Однако в ответ я получаю следующее:

В запросе потока устройств нет пользователя

, который также возвращает ошибку на сервере идентификации:

IdentityServer4.Services.DefaultDeviceFlowInteractionService: Ошибка: ошибка авторизации устройства - пользователь не найден

Мой код для авторизации устройства следующий (ничего особенного, кроме какЕсть от Почтальона):

var result = new DeviceFlowInteractionResult();

var request = await _interaction.GetAuthorizationContextAsync(userCode);
if (request == null)
{
    return result;
}

ConsentResponse grantedConsent = new ConsentResponse
{
    RememberConsent = true,
    ScopesConsented = new List<string> { "XXXXXXXX" },
};

result = await _interaction.HandleRequestAsync(userCode, grantedConsent);

return result;

Кто-нибудь знаком с этой ошибкой?Должно ли это быть связано с тем, что пользователь подключен к другому клиенту через сервер авторизации?

Кажется, я не могу найти никаких подходящих руководств по этому вопросу.

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