ios - 如何退出 iOS ADAL 身份验证?

标签 ios iphone ios8 adal

我已将 ADAL 库集成到我的 iOS 应用程序中,并且运行良好。但现在我想从 ADAL 注销。我该如何退出?

最佳答案

使用 ADAL 交互流时,登录状态存储在两个位置。第一个是完全由应用程序控制的 token 缓存。调用 [authContext.tokenCacheStore removeAllWithError:&error] 是清除所有缓存 token 并阻止 ADAL 在根本不启动浏览器的情况下登录的好方法。

但是,服务器也会在浏览器 cookie 中跟踪登录状态。服务器将记住用户已登录到服务器,直到 cookie 超时或被删除。当 ADAL 检查缓存但未找到合适的 token 时,它将启动 webView。服务器将找到一个 cookie,然后以静默方式让用户登录。浏览器 cookie 在很大程度上对 ADAL 是隐藏的。 ADAL 库可能会提供清除所有 cookie 的注销功能,但如果应用出于某种原因依赖其他 cookie,这会产生副作用。

有几种方法可以解决这个问题。如果您只是想注销并且不介意清除所有 webView cookie,那么在清除缓存后,请按照此处所述清除所有浏览器 cookie:

How to delete all cookies of UIWebView?

这是核选项。另一个更微妙的选择是清除缓存,然后在调用带有 ADPromptBehavior 参数的 aquireToken 时使用 AD_PROMPT_ALWAYS 值。当您使用 AD_PROMPT_ALWAYS 时,会向 AAD 发送一个标志,使其忽略 cookie 并向用户显示新的提示。这会保留 cookie,因此从技术上讲,用户实际上并未退出。对用户来说,他们似乎已注销并且可以稍后再次登录。当他们再次登录时,他们可以根据需要选择其他用户。

这也是您处理多用户登录的方式。如果您已经有一个用户登录,但想添加另一个用户,请不要清除缓存并在下次调用 acquireToken 时传递 AD_PROMPT_ALWAYS。服务器将显示一个新的登录提示并返回一个新 token 。该 token 将存储在该 ADAL 缓存中。您可以通过调用 acquireToken 并传递 userId 来获取特定用户的 token 。

关于ios - 如何退出 iOS ADAL 身份验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29029948/

相关文章:

objective-c - 实例化时使用代码更改 Storyboard中的自定义类

iphone - 在iphone中动态绘制心电图?

iphone - 无法设置UITabBarController的moreNavigationController的右键

swift - 从 IB 加载 View 而不向用户显示

ios - 另一个 uiscrollview 自动布局问题

ios - XCode 中的 Clang 错误

ios - 如何确定 iPhone 6+ (plus) 是处于标准模式还是缩放模式

ios8 - 无法在 Xcode 6 beta 上导入 LocalAuthentication

iPhone iOS UIFont 转换为 CTFontRef 导致尺寸未对齐

ios - Xcode 8.1 选择仅显示 iPhone 7 和 7s 的初始设备 View