5

Tôi đang cố gắng tích hợp với API Office365 thông qua JavaScript với adal.js và jQuery (luồng ngầm OAuth), nhưng tôi đang gặp sự cố khi cố tạo sự kiện lịch cho người dùng của mình . Mã hiện tại của tôi hoạt động tốt khi truy xuất sự kiện lịch và email, nhưng khi tôi cố gắng tạo sự kiện lịch, tôi liên tục nhận được phản hồi "403 - Bị cấm".Quyền bị từ chối (403) khi cố gắng tạo sự kiện lịch

Mã đang hoạt động và hoạt động tại http://oauth.idippedut.dk/oauth.html. Tôi đang truy cập điểm cuối Office 365 API tại https://outlook.office.com/api/v2.0/me/events.

cấu hình của tôi cho "quyền ủy nhiệm" vào ứng dụng Office365/Azure thuê Active Directory của chúng tôi là thế này: enter image description here

Cấu hình cho "Cho phép sử dụng" trên ứng dụng trong Office365/Azure thuê Active Directory của chúng tôi là này: enter image description here

yêu cầu jQuery là thế này:

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": "[email protected]", 
       "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); 
}); 

cấu hình của jQuery là thế này:

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' 
}); 

Và kết quả HTTP yêu cầu là:

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":"[email protected]","Name":"Janet Schorr"},"Type":"Required"}]} 

Tôi thực sự bối rối tại sao tôi nhận được 403, vì tất cả mọi thứ nên được thiết lập một cách chính xác.

Bất kỳ trợ giúp sẽ được đánh giá cao :-)

/Jesper

+0

Tôi đã xem xét kỹ hơn tham chiếu API và đã thay đổi cấu hình "tài nguyên" thành https://outlook.office.com/Calendars.ReadWrite và bây giờ mã trả về lỗi như sau: "Lỗi ADAL Đã xảy ra: AADSTS50001 : Ứng dụng có tên https://outlook.office.com/Calendars.ReadWrite không được tìm thấy trong đối tượng thuê có tên 365projectum.onmicrosoft.com. Điều này có thể xảy ra nếu ứng dụng chưa được quản trị viên của người thuê hoặc được chấp thuận bởi bất kỳ người dùng nào trong đối tượng thuê. Bạn có thể đã gửi yêu cầu xác thực của mình đến người thuê nhà sai. ". Vì vậy mà tôi đã không có nơi nào :-( –

+2

Nó chắc chắn sẽ làm điều gì đó với mã thông báo, Microsoft tiếp tục nâng cấp/cập nhật các API của họ.Vì thực tế này, bạn nên cân nhắc sử dụng điểm cuối đồ thị. – bloC

Trả lời

2

Bạn cấu hình quyền giao cho Microsoft Graph, nhưng gọi endpoint Outlook. Bạn cần thực hiện một trong hai cách: 1. thay đổi cấu hình ứng dụng của bạn để có quyền được ủy quyền cho Outlook/Office 365 Exchange Online. 2. thay đổi ứng dụng của bạn để sử dụng điểm cuối Microsoft Graph (graph.microsoft.com), tức là https://graph.microsoft.com/v1.0/me/events và giữ cấu hình ứng dụng hiện tại.

0

Ban đầu bạn có đăng ký ứng dụng yêu cầu quyền "Đọc người dùng và lịch được chia sẻ" không, sau đó thêm quyền "Có toàn quyền truy cập vào lịch của người dùng"? Nếu có, bạn có thể đang ở trong tình huống mà người dùng đã đồng ý với sự cho phép trước đó và vì sự đồng ý đó được đưa ra, họ sẽ không bao giờ được yêu cầu đồng ý với quyền mới mà bạn đã thêm. Điều này sẽ giải thích lý do ứng dụng của bạn có thể đọc nhưng không thể viết.

Bạn sẽ chỉ ở trong tình huống này với người dùng đã đồng ý TRƯỚC KHI bạn đã thêm quyền mới và chỉ khi người dùng đồng ý thực tế. Người dùng sẽ không phải đồng ý nếu bạn đăng ký ứng dụng với tư cách quản trị viên và đã đăng nhập với người dùng trong cùng một người thuê với tư cách là quản trị viên. Người dùng WOULD phải đồng ý nếu bạn đăng ký ứng dụng với tư cách người dùng thông thường hoặc nếu ứng dụng là ứng dụng nhiều người thuê.

Nếu một trong hai trường hợp, cách đơn giản để xem đây có phải là vấn đề hay không là thử sử dụng ứng dụng như một người dùng hoàn toàn mới chưa đồng ý trước đó. Người dùng mới này sẽ đồng ý với tất cả các quyền mà ứng dụng yêu cầu. Lưu ý rằng nếu đây là ứng dụng chấp thuận quản trị viên, thì bạn sẽ cần một người thuê mới thuần để đồng ý.

Nếu điều này giải quyết được vấn đề, thì bạn cần đưa người dùng hiện tại của mình đi qua bước mà bạn gửi yêu cầu ủy quyền OAuth mới bằng thông số nhắc = đồng ý, để họ đồng ý lại.

Các vấn đề liên quan