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

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