azure-active-directory - 如果清除本地状态,什么可以允许 Azure AD 应用程序访问而无需注销?
问题描述
当您希望将用户从应用程序中注销时,仅清除应用程序的 cookie 或以其他方式结束与用户的会话是不够的。您还必须将用户重定向到 end_session_endpoint 以退出。如果你不这样做,用户将能够重新对你的应用进行身份验证,而无需再次输入其凭据,因为他们将与 Azure AD 终结点进行有效的单点登录会话。
所以,我的问题很简单:如果应用程序已经清除了所有本地状态,那么当应用程序重新登录时,什么会告诉 Azure AD 存在有效的单点登录会话?那里没有 cookie,并且您没有在 URL 中发送任何内容来指示登录会话,那么在引用的场景中,Azure AD 使用什么来确定这一点?
解决方案
那是 Azure AD 本身的 SSO cookie。
如果您仔细查看Azure AD 集成的应用程序模型,您会注意到每个身份验证请求都会发送到https://login.microsoftonline/[tenant_id|common]/
.. 端点中的授权端点。此端点维护与用户代理的 SSO 会话。即使您注销单个应用程序,Azure AD 上的 SSO 仍会保留。这就是为什么当您的应用程序稍后将用户重定向到登录时,他/她已经登录并且不会收到提示。
这在文档的“隐藏”部分中得到了很好的描述,关于弃用的功能 -可配置令牌生命周期。检查单点登录会话令牌部分。尽管该功能(可配置令牌生命周期)本身已被弃用并且将在某个时间点停用,但单点登录会话令牌是 Azure AD 的工作方式,并且不会更改或受影响。我希望一旦令牌生命周期功能退役,部分文档将找到它的位置。
推荐阅读
- ocaml - OCaml - 警告 8:这种模式匹配并不详尽
- javascript - Express 静态文件中间件不会将 css 文件设置为公共
- python - 无法在 R 中安装 Tensorflow,“找不到 {PATH} 的 Python 环境”
- java - 如何在 Eclipse 中修复 Maven 上的导入错误?插件执行的参数编码值 default-resources Plugin
- javascript - if-then-else Javascript 表达式中冒号字符用法的名称
- python - 用于实时日志记录的 Python tkinter 文本小部件
- asp.net-core - .Net Core 3.1 Web Api Jwt 授权返回 401.2 - 未经授权
- javascript - Laravel 7 原生 JavaScript 调用 API
- sql - 点燃默认表
- mysql - LEFT JOIN & SUBQUERY 与空列/ null 作为结果