5

adal.js および jQuery (OAuth 暗黙的フロー) を使用して JavaScript を介して Office365 API に統合しようとしていますが、ユーザーのカレンダー イベントを作成しようとすると問題が発生します。電子メールとカレンダー イベントを取得する場合、既存のコードは正常に動作しますが、カレンダー イベントを作成しようとすると、常に「403 - 許可されていません」という応答が返されます。

コードはhttp://oauth.idippedut.dk/oauth.htmlで公開され、機能しています。https://outlook.office.com/api/v2.0/me/eventsで Office 365 API エンドポイントにアクセスしています。

Office365/Azure テナント Active Directory のアプリに対する "委任されたアクセス許可" の構成は次のとおりです。 ここに画像の説明を入力

Office365/Azure テナント Active Directory のアプリの「アプリケーションのアクセス許可」の構成は次のとおりです。 ここに画像の説明を入力

jQuery リクエストは次のとおりです。

var event = {
    "Subject": "Discuss the Calendar REST API",
    "Body": {
        "ContentType": "HTML",
        "Content": "I think it will meet our requirements!"
    },
    "Start": {
        "DateTime": "2016-01-21T18:00:00",
        "TimeZone": "Pacific Standard Time"
    },
    "End": {
        "DateTime": "2016-01-21T19:00:00",
        "TimeZone": "Pacific Standard Time"
    },
    "Attendees": [
        {
            "EmailAddress": {
                "Address": "jesper@lundstocholm.dk",
                "Name": "Janet Schorr"
            },
            "Type": "Required"
        }
    ]
};

// Create calendar events
jQuery.ajax({
    type: 'POST',
    url: postCalenderEndpoint,
    data: JSON.stringify(event),
    contentType: "application/json",
    headers: {
        'Accept': 'application/json',
        'Authorization': 'Bearer ' + token,
    },

}).done(function (data) {
    //alert(JSON.stringify(data));
}).fail(function (err) {
    jQuery("#loginMessage").text('Error calling REST endpoint: ' + err.statusText + '\n' + err.responseText);
});

jQueryの構成は次のとおりです。

var resource = 'https://outlook.office.com';
var postCalenderEndpoint = 'https://outlook.office.com/api/v2.0/me/events';
var clientID = '28a707a5-0f11-4d93-8b88-6a918544da14';
var tenantName = '365projectum.onmicrosoft.com';
var authContext = new AuthenticationContext({
    instance: 'https://login.microsoftonline.com/',
    tenant: tenantName,
    clientId: clientID,
    postLogoutRedirectUri: window.location.origin,
    cacheLocation: 'localStorage'
});

結果として得られる HTTP リクエストは次のとおりです。

Host: outlook.office.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0
Accept: application/json
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/json; charset=UTF-8
Authorization: Bearer <my token>
Referer: http://oauth.idippedut.dk/oauth.html
Content-Length: 386
Origin: http://oauth.idippedut.dk
Connection: keep-alive

{"Subject":"Discuss the Calendar REST API","Body":{"ContentType":"HTML","Content":"I think it will meet our requirements!"},"Start":{"DateTime":"2016-01-21T18:00:00","TimeZone":"Pacific Standard Time"},"End":{"DateTime":"2016-01-21T19:00:00","TimeZone":"Pacific Standard Time"},"Attendees":[{"EmailAddress":{"Address":"jesper@lundstocholm.dk","Name":"Janet Schorr"},"Type":"Required"}]}

すべてが正しく設定されているはずなのに、なぜ 403 が表示されるのか、本当に困惑しています。

どんな助けでも大歓迎です:-)

/ジェスパー

4

3 に答える 3

2

Microsoft Graph の委任されたアクセス許可を構成しましたが、Outlook エンドポイントを呼び出します。次のいずれかを行う必要があります。 1. アプリの構成を変更して、Outlook/Office 365 Exchange Online のアクセス許可を委任します。2. アプリを変更して、Microsoft Graph エンドポイント (graph.microsoft.com) (例: https://graph.microsoft.com/v1.0/me/events ) を使用し、現在のアプリ構成を維持します。

于 2016-01-22T03:36:42.557 に答える
1

(正しい)トークンを取得するためのリソースとして「 https://graph.microsoft.com 」を試してください。

よろしくお願いします、

AJ

于 2016-01-21T11:33:02.473 に答える
0

最初に「ユーザーと共有カレンダーの読み取り」権限を要求するアプリケーションを登録し、後で「ユーザー カレンダーへのフル アクセス」権限を追加しましたか? はいの場合、ユーザーが以前のアクセス許可に同意している可能性があり、その同意が有効であるため、追加した新しいアクセス許可に同意するよう求められることはありません。これは、アプリが読み取りはできるが書き込みができない理由を説明します。

このような状況になるのは、新しいアクセス許可を追加する前にユーザーが同意した場合であり、ユーザーが実際に同意した場合のみです。アプリを管理者として登録し、管理者と同じテナント内のユーザーでサインインしている場合、ユーザーは同意する必要はありません。アプリを通常のユーザーとして登録した場合、またはアプリがマルチテナント アプリである場合、ユーザーは同意する必要があります。

2 つのうちのいずれかが該当する場合、これが問題であるかどうかを確認する簡単な方法は、以前に同意したことのないまったく新しいユーザーとしてアプリを使用してみることです。この新しいユーザーは、アプリが要求するすべての権限に同意します。これが管理者の同意アプリである場合は、同意するために新しいテナントが必要になることに注意してください。

これで問題が解決する場合は、既存のユーザーに、prompt=consent パラメーターを使用して新しい OAuth 承認要求を送信する手順を実行してもらい、もう一度同意してもらう必要があります。

于 2017-04-23T21:44:09.203 に答える