2015-02-03 7 views
8

Próbuję wysłać żądanie ajax GET do usługi RESTful API Office365 z mojego serwera lokalnego, ale jestem uruchomiony w cross-domain błędów HTTPRequest. Poniżej znajduje się próbka moich „Get-plików-at-korzenia” Spróbuj:ajax uzyskać zapytanie do Office365 REST Api nie działa CORS?

$.ajax({ 
    url: 'https://[sharepoint_site]/_api/v1.0/me/files?access_token='+token, 
    type: 'get', 
    dataType: 'json', 
    success: function(data) { 
    if (success){ 
     success(data); 
    } 
    }, 
    error: error 
}) 

Dostaję następującą odpowiedź od serwera:

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access. The response had HTTP status code 403. 

Próbowałem wysyłania dostęp token jako parametr nagłówka:

headers: {'Authorization': 'Bearer '+ token} 

, ale miał taki sam wynik.

Jakieś pomysły na temat tego, co robię źle?

(Tło: Próbuję tworzyć własne Office 365 „file” próbnika na kliencie, ponieważ nie mogłem znaleźć dostępną bibliotekę onedrive biznesu, który dostarcza ten.)

+0

Czy jesteś pewien, że interfejsy API REST SharePoint obsługują CORS? – MrPiao

+0

Robią teraz! Zobacz poniżej ... –

Odpowiedz

4

Interfejs API plików Office 365 i usługi SharePoint REST właśnie wprowadziły obsługę CORS.

https://msdn.microsoft.com/en-us/office/office365/howto/create-web-apps-using-CORS-to-access-files-in-Office-365

Co staraliśmy się zrobić to dokładnie, jak to działa. Usługa odpowie na żądanie przed lotem OPCJ za pomocą nagłówka Access-Control-Allow-Origin.

Autoryzacja w żądaniu musi być tokenem dostępu udzielonego OAuth2 usługi Azure Active Directory OAuth2.

+1

Działa jak urok! Dzięki! –

-2

można próbować z ustawieniem Access-Control-Allow-Origin w nagłówku, jak pokazano poniżej.

headers: { 'Access-Control-Allow-Origin': '*' } 
+2

Ten nagłówek musi zostać wysłany jako część odpowiedzi, a nie żądanie. –

0
response.setHeader("Access-Control-Allow-Origin", "*"); 
    response.setCharacterEncoding("UTF-8"); 
    response.setHeader("Access-Control-Allow-Methods", "POST, GET"); 
    response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); 
0

Nie masz pojęcia o CORS. Przeczytaj specyfikację: http://www.w3.org/TR/cors/

W twoim przypadku musisz pozwolić na null pochodzenie, ponieważ mówimy o localhost. Musisz zezwolić na metody i nagłówki, które wysyłasz, nawet nagłówek content-type. Musisz pozwolić na wysyłanie poświadczeń, które możesz uzyskać w nagłówku Authorization. Musisz obsłużyć żądania OPTIONS za pomocą 200 ok.

Powiązane problemy