我在iOS应用中遇到了ADAL v2.5.4自动登录的问题。
当用户想要登录MSA帐户时,我们将使用所需的参数和invokeBehavior称为AD_PROMPT_AUTO来调用AcquisitionTokenWithResource。 在该应用的首次运行中,系统会向用户显示该Web视图,随着用户成功登录,该Web视图的登录流程将按预期工作。
在我的应用中点击“退出”后,我将删除所有具有我的应用的ClientID的令牌。此时,我看到缓存中仍然存在一个带有ClientID“ foci-1”的令牌。 另外,我正在清除应用程序的Cookie存储,以使Webview不会重复使用任何Cookie。
当用户希望再次登录时会出现此问题。当再次触发相同的流程进行登录时,现在用户将自动登录。在日志中,我看到“找到了1个用于查询的令牌”。 理想情况下,由于用户较早退出,因此应再次提示他们输入凭据。
处理这种情况的正确方法是什么? 登出方式应该不同吗?重新触发登录之前是否应该进行其他检查?在这种情况下,hintBehavior有什么影响?
答案 0 :(得分:0)
这是我用来从使用ADAL的应用程序执行“注销”的代码。
它调用注销端点以使服务器端的刷新令牌无效,并删除所有相关的cookie和钥匙串条目。
var sinon = require('sinon');
it('should do my bidding', function() {
sinon.stub(some, 'method');
}
afterEach(function () {
sinon.restore();
});
您还需要实现一个fileprivate var safariModal = false
fileprivate var safariHostVC: UIViewController?
public func logout(presentOn viewController: UIViewController?, modal: Bool) {
let client = "xyzzy" // Your app client id here
let redirect = "youruri://somepath/" // Your redirect URI here
ADKeychainTokenCache.defaultKeychain().removeAll(forClientId: clientid, error: nil)
if let url = URL(string:"https://login.microsoftonline.com/common/oauth2/logout?post_logout_redirect_uri=\(redirect)") {
let safari = SFSafariViewController(url: url)
safari.toolbarItems = nil
safari.delegate = self
if #available(iOS 11.0, *) {
safari.dismissButtonStyle = .close
}
guard let vc = viewController else {
return
}
self.safariHostVC = vc
self.safariModal = modal
safari.modalPresentationStyle = .overFullScreen
safari.modalTransitionStyle = .coverVertical
if modal {
vc.present(safari, animated: true, completion: nil)
} else {
vc.navigationController?.pushViewController(safari, animated: true)
}
let cookieJar = HTTPCookieStorage.shared
guard let cookies = cookieJar.cookies else { return }
let cookiesArr = Array(cookies)
for cookie: HTTPCookie in cookiesArr {
if (cookie.name == "SignInStateCookie" || cookie.name == "ESTSAUTHPERSISTENT" || cookie.name == "ESTSAUTHLIGHT" || cookie.name == "ESTSAUTH" || cookie.name == "ESTSSC") {
cookieJar.deleteCookie(cookie)
}
}
}
}
函数
SFSafariViewControllerDelegate