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:
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:
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
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 :-( –
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