J'essaie d'intégrer l'API Office365 via JavaScript avec adal.js et jQuery (flux implicite OAuth), mais j'ai des problèmes pour créer un événement de calendrier pour mon utilisateur . Mon code existant fonctionne correctement lorsque récupère des e-mails et des événements de calendrier, mais lorsque j'essaie de créer un événement de calendrier, je reçois systématiquement une réponse "403 - Interdit".Autorisation refusée (403) lors de la création d'un événement de calendrier
Le code est en ligne et fonctionne à http://oauth.idippedut.dk/oauth.html. J'accède au point de terminaison de l'API Office 365 au https://outlook.office.com/api/v2.0/me/events.
Ma configuration pour "autorisations Delegated" sur l'application dans notre Office365/locataire Azure Active Directory est la suivante:
La configuration des "autorisations d'application" sur l'application dans notre locataire Office365/Azure Active Directory est ceci:
La demande jQuery est la suivante:
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);
});
La configuration de jQuery est la suivante:
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'
});
Et le HTTP demande qui en résulte est la suivante:
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"}]}
Je suis vraiment perplexe pourquoi je reçois le 403, puisque tout doit être mis en place correctement.
Toute aide sera grandement appréciée :-)
/Jesper
J'ai regardé un peu plus près à la référence de l'API et changé la configuration de "ressource" à https://outlook.office.com/Calendars.ReadWrite, et maintenant le code renvoie une erreur comme ceci: "Erreur ADAL s'est produite: AADSTS50001 : L'application nommée https://outlook.office.com/Calendars.ReadWrite est introuvable dans le locataire nommé 365projectum.onmicrosoft.com Cela peut se produire si l'application n'a pas été installée par l'administrateur du locataire ou si elle a été acceptée par n'importe quel utilisateur du locataire Vous avez peut-être envoyé votre demande d'authentification au mauvais locataire. ". Donc ça ne m'a pas du tout :-( –
) Il faut absolument que quelque chose fonctionne avec le jeton: Microsoft continue à mettre à jour/à mettre à jour ses APIs.Pour ce fait, vous devriez peut-être envisager d'utiliser le point final du graphe. – bloC