2017-08-09 147 views
0

OAuth2を使用してExchangeメールボックスにアクセスしようとしていますが、OAuthプロトコルに問題があります。私はlibcurlを使って直接httpコールを行うだけで、ライブラリを使用していません。今、私がアクセストークンを取得するためにそれを使用しようとしている、私は成功した認証コードを取得しているExchangeでOAuth2を使用してアクセストークンを取得できません

https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-protocols-oauth-code

:私はここで見つけるのドキュメントを使用しています。返されるjsonの応答は、 "無効な許可、送信データパーサーの失敗:認証コードが不正または無効です。"です。このURLを

スタートIE:認証コードの取得

:HTTPエラー以下は400が全体の私が生成てる流れである。この時点で

https://login.microsoftonline.com/common/oauth2/authorize?client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F&response_type=code&scope=openid+Mail.ReadWrite 

、ユーザーが提示されますMicrosoftのログイン画面。彼は信任状を入力し、要求されたスコープへのアクセスを承認するよう求められます。彼はそうする。次に、リダイレクトURLで、我々はデータを受け取る:

https://login.microsoftonline.com/common/oauth2/token

:アプリケーションがこのURLにポストした後、 "=コード" の後にデータを抽出

https://login.microsoftonline.com/common/oauth2/nativeclient?code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo 

は、トークンを取得します

このデータ:HTTP ER内

grant_type=authorization_code&client_id=38f1da80-9f80-4ff6-84a8-27c83d7212d3&code=AQABAAIAAAA9kTklhVy7SJTGAzR-p1BcUmXu0izUoOslqxHN85yR0vAVKicFVbtjs3IsKScxeBuTmxBsVy8qT3axn5YaDt_O6M4YVcAk--kpJ-dnNbKtnovjHIxGwtdRawo53UU9u19YP5ST5a8Ekffnxh0Z2gbBM_sKbmbhx2E-y_xs1spgV8gF6im39tLWo&redirect_uri=https%3A%2F%2Flogin.microsoftonline.com%2Fcommon%2Foauth2%2Fnativeclient&resource=https%3A%2F%2Foutlook.office.com%2F 

この投稿結果ROR 400、および返されたデータは次のとおりです。

{"error":"invalid_grant","error_description":"AADSTS70000: Transmission data parser failure:Authorization Code is malformed or invalid....} 

誰も私が何をやったかを見て、私は間違って行くよどこ示唆することはできますか?私は、Shawnが提案したPowershellスクリプトを実行しようとしました。このスクリプトは既存のアプリケーションIDを使用し、ADALを使用して認証コードとトークンを取得します。これはうまくいくように思えたので、Azureのアプリケーション設定ではなく、私のコードに問題があると思われます。

答えて

0

Azure Active Directory V2エンドポイントとV1エンドポイントが混在していると思います。具体的に

、あなたがリンクされている文書、および次ていると言うが、AAD V1エンドポイントのためのものと、(文書化)は、次のURLを使用しています:

https://login.microsoftonline.com/{tenant}/oauth2/authorize

https://login.microsoftonline.com/{tenant}/oauth2/token

注: URLには/v2.0/はありません。

トークンリクエストに表示されるもう1つの問題は、resourceを指定していないことです。あなたが特定のリソースへのアクセストークンを取得したい場合、これは必須と考えています。 Exchange Onlineの場合は、リソースhttps://outlook.office.com/を指定します。

可能であれば、Office 365はExchange APIの代わりにMicrosoft Graph(https://graph.microsoft.com/)を直接使用することを推奨します。これで大丈夫なら、おそらくAAD V2エンドポイントも使用するべきです。上記のV2エンドポイントの同等の記事はhereです。

これがあなたの問題を解決するかどうかを教えてください。

+0

ご意見ありがとうございます。私は、アプリケーション登録ポータルとAzure管理ポータルの両方で行った登録を使用して、両方のエンドポイントを試しています。私のテストでは、実際にAzureポータルで作成されたアプリケーションで2.0以外のエンドポイントを使用しました。まだ動かない。私は「リソース」を追加しようとしましたが、オプションとも言えます。 Azureでサポートケースを開いた場合、私はこの問題を解決することができますか?非常に多くの可動部分があります - 私はいくつかの詳細なコンサルティングが必要だと思っています。 –

+0

こんにちはジェフ、あなたが別のものを試したならば、あなたはそれらの異なるステップで得られる特定のエラーメッセージと結果を投稿する必要があります。これらの詳細がなければ、状況をデバッグするのは難しいです。 ** right **エンドポイントを使用して元のメッセージを更新することができ、その結果としてエラーが発生した場合は、多くの手助けをします。また、私たちは[GitHub here](https://github.com/azure-samples)でサンプルを終わらせるために、完全な作業終了が必要です。 –

+0

OK、投稿内容と場所を正確に反映するように元の投稿を編集しました。 –

関連する問題