2016-11-09 2 views
1

Я создаю приложение ASP.NET Core 1.1 (кросс-платформу) и пытаюсь (используя this sample) добавить пользовательские претензии к возвращенному access_token при запросе конечной точки /connect/token.
Что мне нужно, чтобы не только вернуть претензии сериализованы в access_token, но возвращать их в ответ, как это:Как добавить пользовательские претензии для возврата при запросе маркера с помощью OpenIddict?

{ 
"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

+0

Есть ли конкретная причина, в которой вы нуждаетесь в этом формате? Удаление десериализации части полезной нагрузки возвращаемого токена очень просто даже в javascript? Просто интересно, почему вы хотели бы их, как в вашем примере. –

+0

@LouisLewis Я не использую JWT, поэтому десериализация не применима, как я думаю, даже если бы я использовал JWT, я не смог вернуть пользовательские претензии в токен. – Dabbas

ответ

2

Что мне нужно, чтобы не только вернуть претензии сериализованы в access_token, но возвращать их в ответ, как это:

Это намеренно не поддерживается в OpenIddict (потому что, ну, это не стандарт). Вместо этого вам рекомендуется хранить свойства, которые вам нужны, в качестве заявлений идентификации токенов или через конечную точку userinfo.

См. Другие SO question для получения дополнительной информации.

1

Ну, мы сделали его с помощью событий свойства OpenIdConnectOptions в методы Настройки из Запуск класс при добавлении к промежуточному 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; 
       } 
      } 

это вариант для вашего случая использования?

0

В качестве ответа от @Pinpoint в своем хранилище openiddict-samples я последовал за this article (в разделе Implementing the Connect/Token Endpoint) ..
я понял из его ответа, что я пытаюсь сделать, это не стандарт, поэтому он не так очевидно и легко сделать.
Вам нужно использовать JWT и добавлять к нему пользовательские претензии, чтобы клиент мог декодировать его и получать претензии, а не отправлять их через ответ сам.

+1

Примечание: не используйте JWT в качестве формата токена доступа, если вы хотите делиться сообщениями между вашим сервером авторизации и вашим клиентским приложением. Вместо этого прикрепите пункт 'OpenIdConnectConstants.Destinations.IdentityToken' к вашим утверждениям и добавьте' scope = openid' для получения идентификатора токена (обязательно JWT по определению), вы сможете задуматься о получении необходимых вам требований. – Pinpoint

+0

@Pinpoint Я хочу вернуть 'access_token' вместе с претензиями. – Dabbas

+0

Тождественный идентификатор - это отдельный токен ('id_token'). – Pinpoint