2017-05-09 11 views
2

私は、雇用者が他社に販売する製品にMicrosoft OneDriveサポートを追加しています。設計とプロトタイプの段階を経て、自分の個人アカウントを使用してアプリケーション登録したときに得たアプリケーションIDを使用していました。今、私は実際に製品にコードを追加する作業をしており、企業のOffice365アカウントを通じて(他の人によって)アプリケーション登録によって得られたアプリケーションIDを使用しています。Microsoft OAuth2認証がリフレッシュトークンを返さない

これらの2つのアプリケーション登録の間の認証クエリの結果に違いがあります。私は原因を突き止めようとしています。私はここの誰かが助けてくれることを願っています。

私の個人アカウントから登録を使用したとき、私はMicrosoftのオンラインドキュメントに記載されている/tokenのURLからすべてのデータ項目を受け取りました。企業アカウントから登録を使用するように切り替えたとき、アプリケーションID以外のコードで何も変更しないと、私はrefresh_tokenの値を取得しません。両方のテストで同じログイン資格情報を使用していました。私の個人的な登録を使用する場合

は、ここでの情報です:

URL:https://login.microsoftonline.com/common/oauth2/v2.0/token

リクエストボディ:grant_type=authorization_code&client_id={XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}&code=XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX

リクエストの応答:当社の企業登録を使用する場合

{ 
    "token_type":"Bearer", 
    "scope":"https://graph.microsoft.com/files.readwrite.all", 
    "expires_in":3599, 
    "ext_expires_in":0, 
    "access_token":"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX", 
    "refresh_token":"XXXXXXXXXXXXXX...XXXXXXXXXXXXXXXX" 
} 

ここでの情報です:

URL:https://login.microsoftonline.com/common/oauth2/v2.0/token

リクエストボディ:grant_type=authorization_code&client_id={YYYYYYYY-YYYY-YYYY-YYYY-YYYYYYYYYYYY}&code=YYYYYYYYYYYYYY...YYYYYYYYYYYYYYY

リクエストの応答:client_idcodeの値以外

{ 
    "token_type":"Bearer", 
    "scope":"https://graph.microsoft.com/files.readwrite.all", 
    "expires_in":3599, 
    "ext_expires_in":0, 
    "access_token":"YYYYYYYYYYYYYY...YYYYYYYYYYYYYYY" 
} 

、異なっている唯一のものは、Aを使用してアプリケーション登録(一つです個人用のアカウントと企業用のOffice365アカウントを使用するアカウント)。これの原因は何でしょうか?法人口座からの登録に何か不足していますか?

私は法人登録を閲覧する権限がありませんので、私が自分の個人的な登録に加えたものと比較することはできません。私は彼らにすべての関連情報を与えましたが、私は彼らが私が尋ねたすべてをしたかどうかわかりません。

答えて

3

Microsoftのドキュメントは非常に不明です。彼らのオンラインサービスは多くの反復を経ており、その結果、かなりの残存データが存在します。私がOffice365の中から両方のアプリケーションへのアクセスを取り消し、両者を最初から再認証したとき、両方の呼び出しには/tokenコールの応答のrefresh_token値がなかった。

私は、MicrosoftとOpenIDのマニュアルをまとめて答えを見つけることができました。最初の承認要求でを呼び出し、offline_accessscopeクエリ文字列パラメータに追加すると問題が解決されました。

アプリの登録側に何も追加または変更する必要はありません。この新しいスコープが追加されると、アプリケーションはオフラインでデータへのアクセスを要求していることもユーザーに表示されます。この一連の手順により、refresh_tokenの値が返されます。なぜそれが最初にあったのですか?offline_accessを指定せずにまだ謎に包まれています。

関連する問題