У меня проблема с настройкой авторизации потока устройств с помощью 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;
Кто-нибудь знаком с этой ошибкой?Должно ли это быть связано с тем, что пользователь подключен к другому клиенту через сервер авторизации?
Кажется, я не могу найти никаких подходящих руководств по этому вопросу.