2017-01-02 9 views
4

私はidentityserver4を使用してIDプロバイダアプリケーションを構築しようとしています。現在、私は "Resource Owner Password Credentials"フローを使用しており、トークンエンドポイントからaccess_tokenとrefresh_tokenを返します。「password」grant_type経由でidentity_testを取得する方法

コードスニペットクライアントからTokenEndpointを呼び出すための

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

私の質問は、どのように同じ「リソース所有者のパスワードの資格情報」を用いて「access_tokenは」と「refresh_token」と一緒に流れを「id_token」を取得することです?

答えて

8

同じ「Resource Owner Password Credentials」フローを使用して「access_token」および「refresh_token」とともに「id_token」を取得するにはどうすればよいですか?

あなたはありません。

IdentityServer4では、リソース所有者パスワード資格証明フローでアクセストークンのみが提供されます。また、IDトークンが必要な場合は、認証コードフロー、暗黙コードフロー、またはハイブリッドフローを使用します。

         access_token id_token refresh_token 

Resource Owner Password Credentials  yes   -   yes 

Authorization Code       yes   yes   yes 

Implicit Flow        yes   yes   - 

あなたはすべての3つのトークンタイプを希望しているので、あなたは、サーバー側のコードを使用しているように見えることから、認証コードの流れは最高のフィット。 Some kinds of Hybrid Flowもあなたのために働くでしょう。

From the docs

OAuth 2.0のリソース所有者パスワードの助成金は、クライアントがトークンサービスにユーザ名とパスワードを送信し、そのユーザーを表すアクセストークンバックを取得することができます。

From a GitHub issue:

OpenIDの接続は、リソース所有者の流れを指定していない - (コードまたは暗黙的な流れのような)認証サーバでのみ対話型ログオン。したがって、[つまり、]アイデンティティトークンはなく、アクセストークンのみです。

+0

ありがとう@Shaun。トークン・エンドポイントからaccess_tokenとid_tokenの両方を取得する他の方法はありますか? –

+0

@ codeninja.sjはい。 OpenID Connectフローの1つを使用することができます。あなたのケースでは、認証コードの流れが最良の候補のように見えます。 Webブラウザベースのアプリケーションを構築する場合は、暗黙のフローが必要です。 –

+0

認証コードフローは、「username」と「password」のみを受け入れますが、「client_id」と「client_secret」は受け付けません。 「暗黙のコードフロー」。 "username"と "password"ではなく "client_id"と "client_secret"を受け入れます。しかし、私はトークンを取得するために、これらのすべてのパラメータを渡す必要があります。これを達成するための他の良い方法はありますか? –

関連する問題