Я создал приложение 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 выглядит так: 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Поэтому я предполагал, что получил окончательный 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
Мобильная версия