Я использую ASWebAuthentication and SFAuthentication
для аутентификации на сервере OAuth2 с grant_type : authorization_code
.
Все отлично работает, за исключением:
- успешный вход пользователя
- Выход из системы
revoking access token and refresh token with status code :200
- Проверено, что отзыв работает <------ </li>
- Пользователь нажимает
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()
}
}