Проблема входа в ASWebAuthentication и SFAuthentication после выхода из системы на iOS 11 и iOS 12, не в состоянии сделать сеанс недействительным - PullRequest
1 голос
/ 02 апреля 2020

Я использую ASWebAuthentication and SFAuthentication для аутентификации на сервере OAuth2 с grant_type : authorization_code.

Все отлично работает, за исключением:

  1. успешный вход пользователя
  2. Выход из системы revoking access token and refresh token with status code :200
  3. Проверено, что отзыв работает <------ </li>
  4. Пользователь нажимает login again и opens ASWebAuthentication or SFAuthentication according the iOS версию и просто goes directly in the app, как сеанс проверяет, что токены как-то действительны.
  5. На iOS 13 ASWebAuthentication предоставляет prefersEphemeralWebBrowserSession = true, что решает проблему, но для iOS 11/12 похоже, что я ничего не могу сделать (за исключением того, что проблема, вероятно, на BackEnd)

Когда я вхожу в систему, я передаю параметры prompt:login, но все равно это не помогает.

Вопросы

  1. Есть ли что-то, что я могу сделать, чтобы сделать недействительным сеанс ASWebAuthentication и SFAuthentication на iOS 11/12, аналогично iOS 13 prefersEphemeralWebBrowserSession? (Я не нашел что-то в документации. Apple ничего не разрешает)
  2. Это проблема, которую можно решить в веб-интерфейсе (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()
        }
    }
...