2017-01-04 6 views
1

ОбзорКак получить токен-носитель JWT из WebAPI с Safari в качестве клиента?

У меня есть проект с WebAPI 2,0, который использует JWT маркеры для защиты конечных точек. Когда пользователь входит в мое веб-приложение, в API создается запрос AJAX, который генерирует и возвращает токен-носитель пользователю, который затем сохраняется на стороне клиента sessionStorage, чтобы можно было запросить защищенные конечные точки.

Обратите внимание, что как мое веб-приложение, так и API размещаются на https, используя CORS.

Проблема

Это все работает отлично при использовании Firefox, Chrome, Internet Explorer и Edge. Однако, когда я вхожу в мое веб-приложение через свой iPhone или iPad, API даже вызывает вызов, и поэтому не возвращается токен. Это означает, что мое веб-приложение не может получить данные из защищенных конечных точек, что фактически делает его немного бесполезным!

Исследование

Https requests with Authorization not working via Safari

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

У кого-нибудь есть понимание, почему это может произойти?

Update 05/01/2017

Просто, чтобы сделать этот вопрос и ответить более точно. Это не было проблемой с генерированием или потреблением токенов-носителей, просто что Safari фактически не выполнил бы запрос AJAX для моего API без установки async: false.

ответ

0

После того как я вытащил волосы весь день, я наконец придумал решение.

Для тех, кто еще, что с этим вопросом, как я установил это было добавив асинхра: ложные к моей просьбе, как это:

$.ajax({ 
     type: 'POST', 
     url: apiBase + 'OAuth/Token', 
     data: loginData, 
     async: false // Adding this fixed my issue. 
    }).done(function (data) { 
     sessionStorage.setItem("tokenKey", d.access_token); 
    });