2017-01-02 9 views
4

Я пытаюсь создать приложение поставщика удостоверений, используя identityserver4; В настоящее время я использую поток учетных данных владельца ресурса и возвращает access_token и refresh_token с конечной точки маркера.Как получить id_token вместе с access_token из identityserver4 через «password» grant_type?

фрагмент кода для вызова TokenEndpoint от клиента

var tokenClient = new TokenClient(<TokenEndpoint>, <ClientId>, <ClientSecret>);   
var tokenResponse = await tokenClient.RequestResourceOwnerPasswordAsync(<UserName>, <password>, <Scopes>); 

Мой вопрос в том, как получить «id_token» вместе с «access_token» и «refresh_token», используя тот же «владелец ресурса Пароль учетные данные» поток ?

ответ

8

Как получить идентификатор «id_token» вместе с «access_token» и «refresh_token», используя те же «учетные данные пароля владельца ресурса»?

У вас нет.

В IdentityServer4 поток учетных данных владельца ресурса предоставляет только токены доступа. Если вы также хотите использовать токен идентификатора, используйте поток кода авторизации, поток неявных кодов или гибридный поток.

         access_token id_token refresh_token 

Resource Owner Password Credentials  yes   -   yes 

Authorization Code       yes   yes   yes 

Implicit Flow        yes   yes   - 

Поскольку Вы желаете все три типа маркера, и так как вы по всей видимости, с помощью кода на стороне сервера, поток кода авторизации подходит лучше всего. Some kinds of Hybrid Flow также будет работать для вас.

From the docs:

OAuth 2.0 ресурс субсидия пароль владельца позволяет клиенту отправить имя пользователя и пароль для службы маркеров и получить маркер доступа обратно, который представляет, что пользователь.

From a GitHub issue:

OpenID Connect не определяет владельца потока ресурсов - только интерактивный вход на сервер авторизации (например, код или неявного потока). Таким образом, [другими словами,] нет токена идентификации - только токены доступа.

+0

Thanks @Shaun. Есть ли другой способ получить как access_token, так и id_token с конечной точки маркера? –

+0

@ codeninja.sj Да. Вы можете использовать один из потоков OpenID Connect. В вашем случае поток авторизационного кода кажется лучшим кандидатом. Однако, если вы создаете приложение на основе веб-браузера, вам понадобится Implicit Flow. –

+0

Код авторизации. Только поток принимает только «имя пользователя» и «пароль», но не «client_id» и «client_secret»; «Неявный поток кода». принимает «client_id» и «client_secret», но не «имя пользователя» и «пароль». Но я должен передать все эти параметры, чтобы получить токены. Есть ли другой лучший способ достичь этого? –

 Смежные вопросы

  • Нет связанных вопросов^_^