Проблема входа в систему ASWebAuthentication и SFAuthentication после выхода из системы на iOS 11 и iOS 12, не удается сделать сеанс недействительным
Я использую ASWebAuthentication and SFAuthentication
для аутентификации на сервере OAuth2 с grant_type : authorization_code
.
Все работает отлично, кроме:
- пользователь успешно вошел в систему
- Выйти через
revoking access token and refresh token with status code :200
- Проверено, что отзыв работает <------
- Пользовательская пресса
login again
а такжеopens ASWebAuthentication or SFAuthentication according the iOS
версия и простоgoes directly in the app
как будто сеанс подтверждает, что токены каким-то образом действительны. - В iOS 13 ASWebAuthentication обеспечивает
prefersEphemeralWebBrowserSession = true
который решает проблему, но для iOS 11/12 похоже, что я ничего не могу сделать (за исключением того, что проблема, вероятно, связана с BackEnd)
Когда я вхожу в систему, я передаю параметры prompt:login
но все равно это не помогает.
Вопросы
- Есть ли что-то, что я могу сделать, чтобы аннулировать сеанс ASWebAuthentication и SFAuthentication на iOS 11/12, аналогично iOS 13?
prefersEphemeralWebBrowserSession
? (Я чего-то не нашел в документации. Apple ничего не разрешает) - Это проблема, которую можно решить в интерфейсе (iOS), или это проблема в серверной части?
Спасибо
Предоставление кода только для документации
print("Auth-Login : Process: Authenticate user")
let state = String().createState(length: 4)
let codeVerifier = String().createCodeVerifier()
let codeChallenge = codeVerifier.pkceEncode.base64UriEncode
let parameters = ["state=\(state)", "code_challenge=\(codeChallenge)"]
let url = createUrl(parameters: parameters)
guard let authURL = url else { return }
DispatchQueue.main.async {
self.delegate?.removeLoader()
if #available(iOS 12.0, *) {
print("Auth-Login : Process: Run ASWebAuthenticationSession")
self.webAuthSession = ASWebAuthenticationSession(url: authURL, callbackURLScheme: "no.bilkollektivet.app") { (callbackUrl, error) in
print(callbackUrl)
if let error = error {
completionHandler(nil, nil, error)
} else {
let result = self.getCodeFromCallbackUrl(url: callbackUrl, state: state)
completionHandler(result.code, codeVerifier, result.error)
}
}
if #available(iOS 13.0, *) {
self.webAuthSession.presentationContextProvider = self
self.webAuthSession.prefersEphemeralWebBrowserSession = true
}
self.webAuthSession.start()
} else {
print("Auth-Login : Process: Run SFAuthenticationSession")
self.sfAuthSession = SFAuthenticationSession(url: authURL, callbackURLScheme: "no.bilkollektivet.app") { (callbackUrl, error) in
if let error = error {
completionHandler(nil, nil, error)
} else {
let result = self.getCodeFromCallbackUrl(url: callbackUrl, state: state)
completionHandler(result.code, codeVerifier, result.error)
}
}
self.sfAuthSession.start()
}
}