4

我正在使用ASWebAuthentication and SFAuthentication在 OAuth2 服务器上进行身份验证grant_type : authorization_code

一切都很完美,除了:

  1. 用户登录成功
  2. 注销者revoking access token and refresh token with status code :200
  3. 测试撤销有效<------
  4. 用户按下login againopens ASWebAuthentication or SFAuthentication according the iOS版本,goes directly in the app就像会话正在验证令牌以某种方式有效。
  5. 在 iOS 13 上,ASWebAuthentication 提供了prefersEphemeralWebBrowserSession = true解决问题的方法,但对于 iOS 11/12,我似乎无能为力(除了问题可能出在后端)

当我登录时,我正在传递参数prompt:login,但它仍然没有帮助。

问题

  1. 我可以做些什么来使 iOS 11/12 上的 ASWebAuthentication 和 SFAuthentication 上的会话无效,类似于 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()
        }
    }
4

0 回答 0