0

私はhttps://github.com/Azure-Samples/active-directory-dotnet-webapp-webapi-multitenant-openidconnectのonboardingサンプルコードに基づいていくつかのコードを作成しています。v2.0エンドポイントを使用するためにAuthenticationContextをどのように取得できますか?

私はhttps://apps.dev.microsoft.com/にアプリを登録しました。つまり、oauth v2.0エンドポイントを使用する必要があります。

私は初期のサインイン要求を変更して、動作する/oauth2/v2.0/authorizeエンドポイントを使用し、コントローラ内のProcessCodeメソッドを起動しました。私はコード、id_tokenと状態を取得します。

次に、ProcessCodeコントローラのアクションで、私はAuthenticationContext.AcquireTokenByAuthorizationCodeAsyncメソッドを呼び出しています。 これは/ common/oauth2/tokenに行き、 "error": "invalid_grant"、 "error_description": "AADSTS70000:認証に失敗しました:認証コードが不正または無効です。

コードがv2.0エンドポイントによって発行され、aquireトークン要求が/common/oauth2/v2.0/tokenエンドポイントに送られる必要があるため、私は返されたと思いますか?

私は、どのように私はV2.0エンドポイントを使用するためにAuthenticationContextを得ることができるのですか?これは私を数日運転していました。ところでMicrosoft.IdentityModel.Clients.ActiveDirectoryバージョン3.10.305231913

おかげ

ドナル

答えて

1

v2.0のエンドポイントで動作するように構築されているマイクロソフトの認証ライブラリを使用を使用して

https://www.nuget.org/packages/Microsoft.Identity.Client

このライブラリでは、AuthenticationContextがConfidentialClientApplicationおよびPublicClientApplicationに置き換えられました。あなたは機密クライアントであるWebサーバーでトークンを取得しているので、あなたのケースでは、あなたはこれを行う必要があります:

scopes = new string[] { "https://outlook.office.com/mail.read" } 

var ctx = new ConfidentialClientApplication(clientId, redirectUri, clientCredential, tokenCache); 
var t = await ctx.AcquireTokenByAuthorizationCodeAsync(scopes, authorizationCode); 

あなたがアクセストークンを持つへのアクセスを取得したいものは何でもしてスコープを交換してください。 v2.0エンドポイントでは、限られた範囲のスコープしか使用できません(Outlook APIとMS Graphのメール、カレンダー&連絡先)。

EDIT MSグラフのすべてのスコープがv2エンドポイントで使用できるようになりました。

+0

ありがとうサカは、月曜日にそれを試してみましょう。 –

+0

こんにちはSaca、関連する質問 - 私はコードとid_tokenを許可呼び出しから取得した後、どのように私は現在の承認されたユーザーを決定します。私はJwtトークンを読んで推測していますが、別の方法がありますか?ありがとうDonal –

+0

上記のコードから、t.Userはユーザーのプロパティへのアクセスを提供します。 UniqueIdをピボットする必要があります。 – Saca

関連する問題