我已经将ADAL库集成到我的iOS应用程序中,它正在正常工作。但现在我想从ADAL退出登录。我该如何注销?
我已经将ADAL库集成到我的iOS应用程序中,它正在正常工作。但现在我想从ADAL退出登录。我该如何注销?
guard let clientId = getAuthConfig().clientId else {
// freak out
print("Auth.logout: I freaked out getting the client ID ")
return
}
ADKeychainTokenCache.defaultKeychain().removeAll(forClientId: clientId, error: nil)
并清除cookies:
let cookieJar = HTTPCookieStorage.shared
guard let cookies = cookieJar.cookies else { return }
let cookiesArr = Array(cookies)
for cookie: HTTPCookie in cookiesArr {
print(cookie.name)
if (cookie.name == "SignInStateCookie" || cookie.name == "ESTSAUTHPERSISTENT" || cookie.name == "ESTSAUTHLIGHT" || cookie.name == "ESTSAUTH" || cookie.name == "ESTSSC") {
cookieJar.deleteCookie(cookie)
}
}
#import <ADAL/ADKeychainTokenCache.h>
[...]
[[ADKeychainTokenCache defaultKeychainCache] removeAllForClientId:ADFS_CLIENT_ID error:&error];
NSHTTPCookieStorage *cookieJar = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [cookieJar cookies]) {
if ([cookie.name isEqualToString:@"MSISAuth"] ||
[cookie.name isEqualToString:@"MSISAuthenticated"] ||
[cookie.name isEqualToString:@"MSISLoopDetectionCookie"]) {
[cookieJar deleteCookie:cookie];
}
}
根据最新版本进行更新:
没有共享的 cookie 可供我们控制并使我们能够删除它们所有:
let cookieJar = HTTPCookieStorage.shared
if let cookies = cookieJar.cookies {
let cookiesArray = Array(cookies)
for cookie: HTTPCookie in cookiesArray {
if (cookie.name == "SignInStateCookie" ||
cookie.name == "ESTSAUTHPERSISTENT" ||
cookie.name == "ESTSAUTHLIGHT" ||
cookie.name == "ESTSAUTH" ||
cookie.name == "ESTSSC" ||
cookie.name == "MSISAuth" ||
cookie.name == "MSISAuthenticated" ||
cookie.name == "MSISLoopDetectionCookie" ) {
cookieJar.deleteCookie(cookie)
}
}
}
我找到的解决方案是在MSALInteractiveTokenParameters
配置中选择提示类型为login
:
let webviewParameters = MSALWebviewParameters.init(authPresentationViewController: VC)
let parameters = MSALInteractiveTokenParameters(
scopes: scopes,
webviewParameters: webviewParameters
)
parameters.promptType = .login