我已經將ADAL庫集成到我的iOS應用程序中,並且工作正常。但現在我想從ADAL註銷。我怎樣才能註銷?如何從iOS ADAL身份驗證中註銷?
回答
使用ADAL交互流時,有兩個地方可以存儲登錄狀態。第一個是完全在應用程序控制下的令牌緩存。調用[authContext.tokenCacheStore removeAllWithError:&錯誤]是清除所有緩存的令牌並停止ADAL無法啓動而無需啓動瀏覽器的好方法。
但是,登錄狀態也由服務器在瀏覽器cookie中跟蹤。服務器將記住用戶登錄到服務器,直到cookie超時或被刪除。當ADAL檢查緩存並且沒有找到合適的令牌時,它將啓動webView。服務器會找到一個cookie,然後悄悄地簽署該用戶。瀏覽器cookie在很大程度上隱藏在ADAL中。 ADAL庫可能會提供一個清除所有cookie的註銷函數,但如果應用程序因某些原因依賴於其他cookie,則會產生副作用。
有幾種解決方法。如果你只是想退出,你不介意清除所有webView的Cookie,然後清除緩存後,清除瀏覽器的cookies如下所述:
How to delete all cookies of UIWebView?
這是核選擇。另一個更微妙的選項是清除緩存,然後在調用aquireToken的AD_PROMPT_ALWAYS值中使用ADPromptBehavior參數。當您使用AD_PROMPT_ALWAYS時,會向AAD發送一個標誌,使其忽略Cookie並向用戶提供新的提示。這就使得cookies在技術上保持原樣,用戶並未實際登出。對用戶來說,看起來他們已經退出並且有能力稍後再次登錄。當他們再次登錄時,如果他們願意,他們可以選擇不同的用戶。
這也是您處理多用戶登錄的方式。如果您已經有用戶登錄,但想要添加另一個用戶,請不要清除緩存,並在下次調用acquireToken時傳遞AD_PROMPT_ALWAYS。服務器將顯示新的登錄提示並返回新的令牌。該令牌將存儲在該ADAL緩存中。您通過調用acquireToken並傳遞一個userId來獲得特定用戶的令牌。
Rich的優秀答案的更新。首先,界面與最新ADAL發佈更改,您需要訪問令牌緩存是這樣的:
#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];
}
}
(我發現AD_PROMPT_ALWAYS沒有工作在舊ADFS設施和被迫刪除cookies。)
這3 SWIFT代碼爲我工作(ADAL 2.5.1):
銷燬密鑰庫:
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)
疏通餅乾:
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)
}
}
- 1. JSF身份驗證註銷
- 2. ADAL iOS身份驗證到Azure Web API
- 3. 從Windows身份驗證註銷
- 4. Servicestack身份驗證獲得身份驗證/註銷
- 5. 沒有webview的ADAL身份驗證
- 6. ASP.NET Forms身份驗證 - 註銷
- 7. ASP.NET Windows身份驗證註銷
- 8. 身份驗證Ganglia gweb註銷問題
- 9. 來自Notes身份驗證的「註銷」
- 10. ADAL身份驗證錯誤多租戶
- 11. ASP.NET Windows身份驗證 - 註銷
- 12. 如何從AccountManager註銷我自己的身份驗證器?
- 13. Azure活動目錄身份驗證庫(ADAL)註銷不起作用
- 14. 撤銷Laravel身份驗證
- 15. 從AAD身份驗證中Azure Web App註銷
- 16. 從Windows註銷經過身份驗證的ADFS,並以身份驗證的不同用戶身份登錄
- 17. 使用設計HTTP身份驗證時,如何手動註銷?
- 18. 如何在使用.htaccess(和.htpasswd)身份驗證時註銷?
- 19. 如何使用表單身份驗證註銷jQuery或JavaScript?
- 20. 如何在iOS中實現用戶註冊和身份驗證?
- 21. 工作燈LDAP身份驗證註銷從LDAPRealm
- 22. 從Windows身份驗證應用程序註銷
- 23. 從 - BASIC「Active Directory」強制註銷「身份驗證
- 24. AngularFire身份驗證註冊
- 25. 關於登錄/註銷,在asp.net中進行身份驗證
- 26. 註銷Laravel 5中的多個身份驗證
- 27. Dart身份驗證註冊
- 28. 如何銷燬會話(「註銷」)與令牌身份驗證的用戶
- 29. 使用HTTP基本身份驗證在Vaadin中註銷
- 30. Firefox 4中的基本身份驗證未註銷
你嘗試過這麼遠嗎?請分享你的代碼,你已經嘗試過。 – Popeye 2015-03-13 11:33:23
@Popeye,我試過用這個代碼[authContext。tokenCacheStore removeAllWithError:&error];我沒有找到從他們的文檔註銷的代碼。這裏是我關注的鏈接https://github.com/AzureAD/azure-activedirectory-library-for-objc – 2015-03-13 12:39:12
請用你試過的代碼更新你的問題 – Popeye 2015-03-13 12:40:00