我正在使用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,我似乎无能为力(除了问题可能出在后端)
当我登录时,我正在传递参数prompt:login,但它仍然没有帮助。
问题
- 我可以做些什么来使 iOS 11/12 上的 ASWebAuthentication 和 SFAuthentication 上的会话无效,类似于 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()
}
}