有什么方法可以在 swift ios 应用程序中忘记 AzureAD MSAL 中的登录帐户?

Is there any way to Forget signed-in account in AzureAD MSAL in swift ios app?

我正在尝试注销用户,当我尝试重新登录时,它会在不输入密码的情况下获取之前的用户凭据。 当用户在 MSAL 中注销时,有什么方法可以清除凭据 swift?

简短回答:在 iOS 由于所选技术的限制,截至 2019 年 5 月 30 日无法执行此操作。

您可以在以下位置阅读更多信息:https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/589

并遵循功能请求:https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/issues/425

让参数 = MSALInteractiveTokenParameters(范围:kScopes) parameters.promptType = MSALPromptType.login

将标志保留为 .login,以便它始终要求用户输入凭据。

这只是临时解决方案。

您也可以将此代码用于 iOS 13 或以下。通过更改 promptType 枚举,我们可以处理 WebView 中的登录行为。

 func acquireTokenInteractively() -> Single<(String, String)> {
            return Single<(String, String)>.create { [kScope] observer in
                guard let applicationContext = self.applicationContext else {
                    observer(.error(Errors.unknown))
                    return Disposables.create()
                }

                let parameters = MSALInteractiveTokenParameters(scopes: kScope, webviewParameters: MSALWebviewParameters(parentViewController: UIApplication.shared.keyWindow!.rootViewController!))
                parameters.promptType = .login //Change it based on ur requirement e.g. .selectAccount, .consent, .promptIfNecessary
                applicationContext.acquireToken(with: parameters) { (result, error) in
                    if let error = error {
                        NSLoggerSwift.Logger.shared.log(.custom("OutlookLogin"), .error, "\u{274C} Could not acquire token: \(error.localizedDescription)")
                        observer(.error(Errors.badToken))
                    }

                    guard let result = result else {
                        observer(.error(Errors.badToken))
                        return
                    }
                    observer(.success((result.accessToken, result.account.username ?? "")))
                }
                return Disposables.create()
            }
}

您需要设置

 parameters.promptType = .selectAccount

然后用户可以通过单击...注销,然后 select 注销