Как танцевать OAuth с API Deezer на iOS?IOS

Программируем под IOS
Ответить
Anonymous
 Как танцевать OAuth с API Deezer на iOS?

Сообщение Anonymous »

В настоящее время я пытаюсь завершить танец OAuth с помощью Deezer API.
Я создал приложение Deezer на их сайте и полностью заполняю обязательные поля.
Я не использую Deezer SDK в качестве он уже давно устарел.
Я загружаю запрос с помощью WKWebView, и запрос выглядит так:

Код: Выделить всё

https://connect.deezer.com/oauth/auth.php?app_id=MY_APP_ID&redirect_uri=MY_REDIRECT_URL&response_type=token&perms=basic_access
Откроется веб-просмотр с формой аутентификации.
После того, как я вхожу в систему с учетными данными своей учетной записи Deezer, я должен быть перенаправлен на предыдущий указанный URL-адрес MY_REDIRECT_URL ,
Но я перехватываю перенаправление так:

Код: Выделить всё

    public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
if !isLoading {
isLoading = true
}
if let redirectedUrl = navigationAction.request.url, redirectedUrl.host == AppConfig.redirectHost {
// extracting token from url
let deezerToken = DeezerURLBuilder.deezerToken(fromUrl: redirectedUrl)
// saving token
PrefUtils.shared.deezerToken = deezerToken
didLogin = true
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
Я не хочу переходить по URL-адресу перенаправления, потому что я работаю в приложении iOS и надеюсь, что смогу предотвратить шаг сервера.
Я заметил, что перенаправленный URL выглядит так: https://MY_REDIRECT_URL/#access_token=frazeeFRT188maXzvPiCeTDEjCCbrIGGaCwlkGQra4whmp7rtJ&expires=1468
Я не понимаю, почему, потому что из Deezer API, я должен увидеть параметр запроса code, который мне следует поместить в следующий запрос для проверки подлинности приложения, например:

Код: Выделить всё

https://connect.deezer.com/oauth/access_token.php?app_id=MY_APP_ID&secret=MY_APP_SECRET&code=THE_MISSING_CODE
Этот запрос был отправлен с помощью URLSession.shared.data.
Поэтому я предполагал, что получил окончательный access_token и продолжу запрашивать пользователя информация с:

Код: Выделить всё

https://api.deezer.com/user/me?access_token=frazeeFRT188maXzvPiCeTDEjCCbrIGGaCwlkGQra4whmp7rtJ
Наконец я получил сообщение об ошибке:

"Необходимо использовать активный токен. для запроса информации о текущем пользователе"

Я пробую первый запрос внутри Safari в macOS, затем меня перенаправляют на MY_REDIRECT_URL . После этого я попробовал запросить информацию о пользователе, и это удалось, я увидел ответ JSON в Safari.
Насколько я понимаю, Deezer установил файлы cookie во время перенаправления в Safari. Я предполагаю, что запросы выполняются из-за файлов cookie, и когда я нахожусь в приложении iOS, WKWebView отклоняется, и последующие запросы выполняются без них.
Подводя итог,почему я получаю access_token без предоставления «секретного запроса моего приложения»?
(потому что я запрашиваю его с набором параметров response_type to token)
Как правильно танцевать OAuth с Deezer API в приложении SwiftUI/Swift без Deezer SDK?
PS: Я не пробовал библиотеку OAuthSwift, так как хочу, чтобы она была простой.
РЕДАКТИРОВАТЬ: РЕШЕНО
это была опечатка в моем параметре URL... но он полностью работает без перенаправления сервера.

Подробнее здесь: https://stackoverflow.com/questions/748 ... api-on-ios
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»