SSO с ASWebAuthenticationSession / WKWebView завершается с ошибкой области действия - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть реализация единого входа на iOS 13 в Swift 5:

let callbackURLScheme  = "myb://auth"
authSession = ASWebAuthenticationSession(url: url, callbackURLScheme: callbackURLScheme, completionHandler: { (callbackURL: URL?, error: Error? ) in
    guard error == nil, let successURL = callbackURL else {
        print(error!)
        return
    }

    print(successURL.absoluteString)

    let queryItems = URLComponents(string: successURL.absoluteString)?.queryItems
    let token = queryItems?.filter({ $0.name == "token" }).first?.value

    print(token)
})

if #available(iOS 13.0, *) {
    authSession?.presentationContextProvider = self
    authSession?.prefersEphemeralWebBrowserSession = false
} else {
    // Fallback on earlier versions
}

authSession?.start()

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

Если я использую тот же URL-адрес единого входа с обычным браузером Safari для мобильных устройств, он заканчивается действительным токеном сеанса.

Мне интересно, почему он отличается и как заставить его работать в приложении?

1 Ответ

0 голосов
/ 02 апреля 2020

Я упомянул одну вещь - не использовать URL обратного вызова с sla sh /. Попробуйте вместо этого сделать callbackURLScheme myb:auth. Кроме того, вы не отображали окружающий код, но сохранили ссылку на свой authSession? Если у вас нет экземпляра var для его хранения, он выпадет из области видимости и будет освобожден.

final class AuthManager: NSObject {
    var authSession: ASWebAuthenticationSession?

    private func startAuthentication() {
        self.authSession = ASWebAuthenticationSession(...)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...