- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
情况
我有一个使用 Azure AD B2C 作为其身份验证的 Web 应用程序。我们使用 OWIN OpenIdConnect 来处理此过程。 session 超时设置为 15 分钟(web.config 中的 sessionState 和我们的 AzureADB2C 登录策略),并且我们在策略级别的策略中启用了 SSO。 session 设置为滚动形式。 OWIN CookieAuthentication 也使用 15m 滑动到期时间。
Web 应用程序分为多个部分(虚拟文件夹),但都共享同一个 Azure AD B2C 实例。然而,每个在 AD 中都有自己的应用程序注册。 (这些基本上是国家/地区,因此我们有 www.site.com/nl 和 www.site.com/de)这可以确保您登录时也能正确返回您所在的国家/地区。此外,如果需要,我们可以将一个国家/地区链接到不同的 AD 实例。
问题
当用户登录到应用程序,然后在他/她的 session 中注销时,登录过程会正常运行,不会出现问题,并且在尝试再次登录时,会要求他/她再次登录。这没问题并且符合预期。
但是,当用户登录并让他/她的 session 过期时,我们会显示一个弹出窗口,询问您是否要继续(指向登录页面的链接)或退出(指向注销页面的链接)。这两种情况下,用户都不需要提供他/她的凭据,这不是我们想要的行为(因为这意味着如果有人保持其帐户处于打开状态并且发生超时,任何人仍然可以登录该帐户而无需提供凭据)
观察
https://login.microsoftonline.com/myazuread.onmicrosoft.com/oauth2/v2.0/logout?p=b2c_1_mypolicyname&post_logout_redirect_uri =https%3a%2f%2fwww.site.com%2fbe&x-client-SKU=ID_NET&x-client-ver=1.0.40306.1554
当用户在 session 期间注销时。不过,我在这次调用中看到 Azure 端有 2 种不同的行为。A) 当 session 未过期时,此调用首先调用 https://login.microsoftonline.com/my-azure-ad-guid/oauth2/logout
,然后重定向到我的重定向 URI .
B) 当 session 过期时,此调用直接重定向到我的重定向 uri,而不传递情况 A 中的 uri。
情况 A 和 B 之间有 1 个名为 x-ms-cpim-sso:myazuread.onmicrosoft.com/b2c_1_mypolicyname
的 cookie 差异,它仅存在于情况 A 中,这让我相信这会导致不同的行为。然而,这是 login.microsoftonline.com 域上的 Microsoft cookie,因此我对此无法控制或影响。
当 session 超时后初始化登录时,我看到调用包含与我的任何应用程序都不匹配的 clientid:https://login.microsoftonline.com/myazuread.onmicrosoft.com/oauth2/authorize?client_id=bb2a2e3a-c5e7-4f0a-88e0-8e01fd3fc1f4&redirect_uri=https%3a%2f%2flogin.microsoftonline.com%2fte%2fmyazuread.onmicrosoft.com%2foauth2%2fauthresp&response_type=id_token&scope=email+openid&res ponse_mode=查询&nonce=nonce&nux =1&nca=1&domain_hint=myazuread.onmicrosoft.com&mkt=en-US&lc=1033&state=StateProperties
这给我带来了一个问题:这个应用程序是什么以及为什么它在我的身份验证流程中使用,导致我的用户不需要重新 -进行身份验证吗?
问题:如何确保用户在每次 session 超时后都需要进行身份验证?
最佳答案
2020 年 9 月 4 日更新:以下信息已被弃用。请注意微软的通知:
After hearing from customers during the preview, we've implemented authentication session management capabilities in Azure AD Conditional Access. You can use this new feature to configure refresh token lifetimes by setting sign in frequency. After May 30, 2020 no new tenant will be able to use Configurable Token Lifetime policy to configure session and refresh tokens. The deprecation will happen within several months after that, which means that we will stop honoring existing session and refresh tokens polices. You can still configure access token lifetimes after the deprecation.
我相信现在可以利用“用户登录频率”设置,因为“浏览器 session 持久性”现在已正确完成。遗憾的是,我无法对此进行测试,因此如果有人可以确认,请在该问题的新答案中描述您如何成功解决此问题,我将更改答案并将此消息定向到您的答案。
旧信息:
经过与 Microsoft 支持团队几周的合作,我们终于得到了最终答案和明确的解决方案:
You are using a sign in policy. For legacy reasons, when you make a call to the /authorize endpoint for a “Sign in policy”, you first hit the Azure AD B2C service, and then immediately get rerouted to the Azure AD service. The field for username/password is then actually displayed by the Azure AD service (and not by Azure AD B2C). Once you enter a valid username/password, Azure AD stores a cookie on the client machine for SSO reasons, redirects the client back to Azure AD B2C, which then mints a token and returns a B2C token to the application, along with storing its own cookies for SSO reasons. In other words, Azure AD B2C federates to Azure AD for the sign in, and both Azure AD and Azure AD B2C have cookies of their own to maintain SSO.
Now when you call logout to Azure AD B2C or when Azure AD B2C’s session expires, Azure AD B2C does its thing to close the session, which is to delete the cookies. However, it does not delete the Azure AD cookies. Which means that when you sign in again, Azure AD B2C recognizes that you’re not signed in, and calls Azure AD. Because Azure AD has cookies planted or Azure AD’s session is not expired, it SSO’s the user and the user does not need to enter the username/password again (which is the exact behavior you do not want).
To work around this for right now, please also call the logout endpoint for Azure AD after you call the logout endpoint for Azure AD B2C. The logout endpoint for Azure AD is the same as the logout endpoint for Azure AD B2C, but without the policy in the URL. For session expiry, you will need to also limit the session timeout for Azure AD.
We are working on a sign-in policy (currently in private preview) that do not take a dependency on Azure AD. We are also looking into fixing the behavior for the original Sign in policies.
我的问题的解决方案确实是使用规定 token 生命周期的策略来限制 Azure AD 本身的 session 超时。这是我设置的策略,一般来说,租户上的所有 session 都会过期 15 分钟(这是我们的愿望,如果您只想为特定应用程序等设置此策略,请阅读本文)
Connect-AzureAD
New-AzureADPolicy -Definition @('{"TokenLifetimePolicy":{"Version":1, "MaxAgeSessionSingleFactor":"0.00:15:00","MaxAgeSessionMultiFactor":"0.00:15:00"}}') -DisplayName "TokenLifetimeDefaultPolicy" -IsOrganizationDefault $true -Type "TokenLifetimePolicy"
Disconnect-AzureAD
感谢 Microsoft 支持。
关于 session 超时后 Azure AD B2C 注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49067562/
我有一个场景,我们必须通过 Azure AD 对企业用户进行身份验证,但通过 Azure AD B2C 对外部用户进行身份验证——所有这些都来自同一个登录屏幕。 有一些 Web 应用程序将共享此功能。
在使用 Azure AD B2C 和 Azure AD B2B 之前,我通常会将应用程序添加到我们租户的 Azure AD 中,并且 Office 365 用户可以使用其帐户 (SSO) 访问应用程序
当 Azure Active Directory 信任访问本地 Active Directory 用户时,我们是否可以使用本地 AD 用户名(域限定的 sam 帐户名称,例如:cosmos\brahm
什么是在网站上展示广告的好托管广告管理器? 我听说过OpenX ,但从未使用过。 最佳答案 我们使用名为 Ad Serving Solutions http://www.adservingsoluti
是否可以将用户从云 Azure Active Directory 同步到本地 AD? On Premises 这里有点错误,因为它实际上是 Azure 中的虚拟网络,带有 Windows Server
我正在关注这里的答案:Multi-Tenant Azure AD Auth in Azure AD B2C with Custom Policies 以及这里的演练:https://github.co
我正在尝试使用/common Azure AD 端点在 Azure AD B2C 中使用 Azure AD Auth。根据How to sign in any Azure Active Directo
来自 Mercurial 文档: The manifest is the file that describes the contents of the repository at a particu
我正在尝试将 firebase admob 与 React Native 集成到我的应用程序中,一切都适用于 testID横幅 ('ca-app-pub-3940256099942544/293473
我有一个应用程序需要根据其本地 AD 通用名称来过滤权限。几点注意事项: Azure AD Connect 正在 OnPrem AD 和 Azure 之间同步数据 我已成功将登录用户的组信息从 Azu
我正在使用 blogspot 平台并在我的网站上使用了 Google Adsense。我想对齐一个自动 Adsense 广告,它根本不居中,而带有代码的广告则完全没有问题。它只是自动广告,有人可以帮助
为什么redirect URL必须完全匹配?在域级别进行匹配是否不足以提供适当的安全性? 如果我有数百条路径怎么办? 示例网址: https://myawesomesite.com https://m
我即将创建一个新的 Azure AKS 群集,并且希望将 AKS 与 Azure Key Vault 集成。几个月前,在学习阶段,我看到需要使用Azure AD pod管理的身份来做到这一点,但现在我
我正在尝试配置我的 Azure AD 以同步我的本地 AD DS,如果在 Microsoft Azure AD 中添加任何用户,它应该自动在我的本地 AD 中注册。 我已创建 Azure AD 并配置
我有大约 50 个用户的 Azure AD。这些用户是我们购买Office365时创建的。假设 Azure AD 上的域是 example.com。 ([email protected])在本地,我们
我正在尝试获取组 Azure AD 的名称,Azure 登录 (openId) 后的内部 token 我收到 json 格式的组 ID,但我需要组名称。 登录后的Json: Claims 尝试使用Gr
我们希望将 Azure AD B2C 用于我们的 Web 应用程序,以允许用户使用其公司 ADFS 帐户登录。 根据Azure Active Directory B2C: Add ADFS as a
首先,我无法了解为什么需要这些数据,也无法了解有关网络的细节。您必须相信我,除了运行 LDAP 查询的 PowerShell 脚本之外,没有其他方法可以获取这些数据。 我正在使用具有多个林和多个域的网
我是一个相当新的 PS 用户...正在寻求有关 powershell 脚本的帮助来获取用户所属的安全组列表。 描述我需要什么: 我有包含许多用户(samaccountnames)的输入列表(txt 文
我有两个要存储在目录中以供我的应用程序使用的声明。这些内容不可供用户编辑,但可用于应用程序从 token 中读取。 内置策略可以检索声明,但是,使用自定义策略检索这些声明没有取得任何成功。 通读文章“
我是一名优秀的程序员,十分优秀!