2015-04-03 2 views
3

Я работаю над одностраничным приложением, которому также нужен автономный доступ к Microsoft OneDrive. Соответственно, я направляю пользователя для аутентификации с помощью OneDrive с использованием метода потока кода.Запрос OneDrive oAuth token получает ошибку CORS

Код успешно извлекается приложением, но при вызове https://login.live.com/oauth20_token.srf запрос выходит из строя с ошибкой CORS.

См. Прикрепленное изображение для заголовков HTTP с моей консоли javascript в Chrome. Ответ от сервера отсутствует заголовок

Access-Control-Allow-Origin:, который вызывает ошибку CORS

Как включить доступ CORS для моего приложения? Я не вижу никаких вариантов в консоли разработчика?

Спасибо! enter image description here

ответ

0

Вы должны быть в состоянии сделать аутентифицированные запросы с помощью CORS API OneDrive после того, как вы получили access_token. Из предоставленных HTTP-заголовков похоже, что вам нужно будет выполнить еще один вызов, чтобы выкупить код для токена доступа. Возможно, вы захотите увидеть http://onedrive.github.io/auth/msa_oauth.htm (шаг 2). После того, как вы получили токен доступа, вам нужно добавить токен доступа в заголовок «Авторизация» вашего запроса. Пример HTTP-запроса с использованием заголовка CORS и ответа ниже. Надеюсь, это поможет.

var xhr = new XMLHttpRequest(); 
 
var oauthAccessToken = accessTokenStoredHere(); 
 
xhr.open('GET', 
 
    'https://api.onedrive.com/v1.0/drive/'); 
 
xhr.setRequestHeader('Authorization', 
 
    'Bearer ' + oauthAccessToken); 
 
xhr.send();

GET /v1.0/drive/ 
HTTP/1.1 
Authorization:Bearer YOUR_ACCESS_TOKEN 
Host:api.onedrive.com 
X-Target-URI:https://api.onedrive.com 
Connection:Keep-Alive 
+0

Здравствуйте Toan происходящей ошибки CORS, когда я пытаюсь сделать вызов, чтобы искупить маркер. Я смог обойти это, получив сервер, чтобы сделать запрос маркера. Проблема CORS остается в том, что браузер не может напрямую выкупить токен, потому что маркерный сервер не возвращает заголовок 'Access-Control-Allow-Origin: ' – user1936097

+0

Я считаю, что OneDrive API поддерживает CORS, но не службу OAuth. –

1

Прямо сейчас, кажется, что нет способов исправить эту проблему, но я нашел обходные для разработчиков.

Если вы используете Chrome в качестве своего браузера, вы можете скачать this extension и включить его при попытке аутентификации. Тем не менее, я не думаю, что вы хотите попросить пользователей загрузить это расширение, так как это иногда может вызвать проблему безопасности, и включение в него все время будет приводить к ошибкам при использовании других сайтов (попробуйте Google или Facebook, Google просто сработает сайт и Facebook подскажут вам что-то не так).

В результате вы можете попробовать другой тип потока. Поток кода, похоже, работает на других платформах, кроме браузера.

0

Поток кода не поддерживается для CORS. Это довольно стандартная реализация OAuth 2. Ток-ток предназначен для использования в одностраничных приложениях/сценариях, где необходим CORS, а токен-поток работает с CORS.

Если ваше приложение работает дольше, чем 1-часовой срок действия токена доступа, вы можете использовать скрытый IFRAME для бесшумной повторной аутентификации и получения нового токена доступа. Более подробная информация доступна по адресу Authentication Scenarios for Azure AD

0

Для проблем безопасности браузеры будут блокировать запросы от другого источника, кроме отправителя, за исключением случаев, когда ответственный за API разрешает разрешать исходные запросы в ответе возвращенного сервера. Конфигурация CORS, только, сделанная владельцем API (часть сервера), в этом случае это Microsoft; к сожалению, вы не можете изменить эту конфигурацию, за исключением того, что блокируете обнаружение CORS в браузерах, и это не идеальное решение и может привести к угрозам безопасности и будет обобщено для всех приложений, доступных через этот реконфигурированный браузер.

Вы должны выполнить запрос через ваш сервер и завернуть его в доступной ссылке с вашего API