2017-02-06 19 views
0

私は別のエンドポイントへのMicrosoftグラフへの多数の呼び出しでページを作成しています:などOneDriveファイル、電子メール、ユーザーのプロパティを取得するには、マイクロソフトグラフAPI - 403 v1.0を/私/イベントのために禁止

1つの呼び出しでは、現在のユーザーのカレンダーイベントを取得できません。私が使用しているエンドポイントはhttps://graph.microsoft.com/v1.0/me/eventsです。応答は403禁止です。

enter image description here

アプリケーションがCalendars.ReadCalendars.ReadWrite許可を必要とするMicrosoftのドキュメントhereによります。私はの下にパーミッションを委任して、これらの両方をチェックしました。私はその後、このアプリのためにAzure ADのすべての51の許可スコープにチェックを入れましたが、それと同じ問題です。

enter image description here

私はまた、AzureのADで新しいアプリを作成しようとしたが、これは助けにはなりませんでした。

Microsoft Graphを使用して現在のユーザーのカレンダーイベントを取得するにはどうすればよいですか?私は何が欠けていますか?

EDIT:

私は認証にADAL.jsを使用しています。これは私が自分のdoAuthアプリケーションのクライアントIDを取り込む関数で持っているコードです。

function doAuth(clientId) { 
    var variables = { 
     // Domain of Azure AD tenant 
     azureAD: // the appropriate URL, 
     // ClientId of Azure AD application principal 
     clientId: clientId, 
     // Name of SharePoint tenant 
     sharePointTenant: // the appropriate URL 
    } 

    // Create config and get AuthenticationContext 
    window.config = { 
     tenant: variables.azureAD, 
     clientId: variables.clientId, 
     postLogoutRedirectUri: window.location.origin, 
     endpoints: { 
      graphApiUri: "https://graph.microsoft.com", 
      sharePointUri: "https://" + variables.sharePointTenant + ".sharepoint.com", 
     }, 
     cacheLocation: "localStorage" 
    } 

    var authContext = new AuthenticationContext(config); 
    var isCallback = authContext.isCallback(window.location.hash); 
    authContext.handleWindowCallback(); 

    if (isCallback && !authContext.getLoginError()) { 

     window.location = authContext._getItem(authContext.CONSTANTS.STORAGE.LOGIN_REQUEST); 
    } 

    var user = authContext.getCachedUser(); 
    var token = authContext.getCachedToken(clientId); 

    if (!user || !token) 
     authContext.login(); 

    return authContext 
} 
+0

login.microsoftonline.comから取得したJWTトークンに、必要なスコープが含まれているかどうかを確認しましたか? – RasmusW

+0

@RasmusWスコープのトークンを調べる方法を教えてください。 'AuthenticationContext'オブジェクトで使用する必要があるメソッドはありますか? – Submits

+0

私はそれを手動で行うことを意味しました。あなたはjwt.ioやjwt.calebb.netのようなサイトを入手してデコードすることができます。最後のものは、もしそれらが標準JWTであれば、それぞれのプロパティに関するいくつかのドキュメントを含んでいます。 – RasmusW

答えて

1

アプリケーションに割り当てられているスコープを変更したようです。このような場合は、新しいスコープを使用してユーザーの再認証を行う必要があります。これを行うには、最初のODATAリダイレクトのクエリ文字列に&prompt=consentを追加します。これにより、承認のために新しいスコープがユーザーに提示されます。

あなたの設定でextraQueryParameterパラメータを使用してADAL.jsライブラリでこれをトリガすることができます:私はこれを理解することができませんでしたし、Exchange APIの代わりを使用して終了最後に

// Create config and get AuthenticationContext 
window.config = { 
    tenant: variables.azureAD, 
    clientId: variables.clientId, 
    postLogoutRedirectUri: window.location.origin, 
    endpoints: { 
     graphApiUri: "https://graph.microsoft.com", 
     sharePointUri: "https://" + variables.sharePointTenant + ".sharepoint.com", 
    }, 
    cacheLocation: "localStorage", 
    extraQueryParameter: "prompt=consent" 
} 
+1

Marc、クエリ文字列に '&prompt = consent'をどのように追加すればいいですか?私はADALjsを使用しています。私はコードで質問を更新します。 – Submits

+0

私はこのステップを私の答えに加えました。希望が役立ちます。 –

0

メール、カレンダー、タスク用のグラフ(これは現在、ベータ版のGraph APIでのみ利用可能なため、タスクにはExchange APIが必要でした)。

関連する問題