Как добавить пользовательские утверждения, которые будут возвращены при запросе токена с помощью OpenIddict?
Я создаю приложение ASP.NET Core 1.1 (кроссплатформенное) и пытаюсь (используя этот пример) добавить пользовательские утверждения к возвращаемым access_token
при запросе /connect/token
конечная точка.
Мне нужно не только вернуть претензии, сериализованные в access_token
но чтобы вернуть их в ответ, как это:
{
"token_type": "Bearer",
"access_token": "...",
"expires_in": 1799,
"custom_claim": "..."
}
Что я нашел в интернете, что я должен использовать AspNet.Security.OpenIdConnect.Server
и напишите моему провайдеру, чтобы иметь возможность делать то, что я хочу.
Разве нет простого способа использования первого образца?
Я использую OAUth 2.0, тип предоставления Password
и нет JWT.
Не требуется не использовать JWT, просто я использовал OAuth в ASP.NET 4.5
3 ответа
Мне нужно не только вернуть заявки, сериализованные в access_token, но и вернуть их в ответ, подобный этому:
Это намеренно не поддерживается в OpenIddict (потому что, ну, это не стандартно). Вместо этого вам рекомендуется хранить нужные вам свойства в качестве утверждений идентификатора токена или через конечную точку userinfo.
Смотрите этот другой вопрос SO для получения дополнительной информации.
Что ж, мы сделали это, используя свойство Events в OpenIdConnectOptions в методе Configure класса Startup при добавлении промежуточного программного обеспечения Open Id Connect, например, так:
Events = new OpenIdConnectEvents
{
OnTicketReceived = n =>
{
//TODO Your logic here to add custom claims via n.Principal.Identities.First().AddClaims();
return Task.CompletedTask;
}
}
Это вариант для вашего варианта использования?
В ответ от @Pinpoint в своем репозитории openiddict-samples
Я следил за этой статьей (в Implementing the Connect/Token Endpoint
раздел)..
Из его ответа я понял, что то, что я пытаюсь сделать, не является стандартным, поэтому это не так очевидно и легко сделать.
Вам необходимо использовать JWT и добавить к нему настраиваемые утверждения, чтобы клиент мог декодировать его и получать утверждения, а не отправлять их через собственный ответ.