【问题标题】:Disable Azure Active Directory Single Logout禁用 Azure Active Directory 单一注销
【发布时间】:2021-06-26 13:54:02
【问题描述】:

这是一个场景,我给了单页 Web 应用程序(只是 HTML 和 CSS)来验证和授权用户访问这个应用程序。 所以我使用 .NET CORE 和 Azure AD 通过 Visual Studio 对用户进行身份验证(将应用注册到 Azure 门户)。登录工作正常,但当我尝试注销时,它会将我从所有其他使用 Azure AD 登录机制的应用程序中注销。

例如:在我的浏览器中,如果我打开使用 Azure AD 身份验证和 my.NET 应用程序的 Outlook,如果我想从我的自定义 .NET 应用程序中注销,它会自动将我从 Outlook 中注销。有什么办法可以防止这种情况发生吗?我只想从我的 .NET 应用程序中注销,而不是从 Outlook 或其他使用 Azure AD 身份验证的应用程序中注销。

注销:我正在使用链接:/MicrosoftIdentity/Account/SignOut

更新:我没有在我的 .net 应用程序上将 Azure AD 添加为连接服务,但是一旦我在我的 .net 应用程序上添加了 azure 广告,注销就可以完美地用于 Google Chrome。 (我可以在不退出 Outlook 的情况下退出应用程序)但是当我用 firefox(regular,developer)尝试同样的事情时,它会让我退出应用程序和 Outlook。 查看网络日志,我发现注销后,firefox 正在调用 https://outlook.office365.com/owa/auth/logoff.aspx?cmd=logoff&exlive=1&lgtype=1&sid=xxxxxxxxxx 将我从 Outlook 中注销,但 Chrome 没有调用此 URL。

我可以做些什么来防止这种情况发生,或者我应该与 Microsoft 联系吗?

【问题讨论】:

  • 我在我这边进行了测试,在 Edge 浏览器中从我的自定义 Web 应用程序中退出后,我在同一个浏览器中刷新了 Outlook 网站,它不会要求我再次登录.如果我在登录 Outlook 时选择“保持登录”,即使我关闭浏览器然后重新打开它,Outlook 也不会要求我登录。所以你能否分享更多关于“自动注销我”的详细信息外表'?顺便说一句,this doc 提到 msal 注销将清除浏览器存储中的缓存。
  • 当我从我的自定义 Web 应用程序中退出时,它会将我重定向到您要退出哪个帐户?页面,当我单击我的帐户时,它会自动将我从 Outlook 和 Web 应用程序中注销。您的 Web 应用会重定向到 Microsoft 选择一个帐户以退出页面还是自动将您注销?
  • 是的,当点击退出时,它会重定向到页面让我选择一个帐户,我选择既用于登录outlook又用于我的自定义应用程序的帐户。
  • 您是如何实现注销功能的?您是否使用/MicrosoftIdentity/Account/SignOut 退出。这就是我的注销的样子
  • 我的springboot web app可以看这个screenshot,spa可以看this sample code,msal的其他示例点击this

标签: azure asp.net-core azure-active-directory single-page-application microsoft-identity-platform


【解决方案1】:

如果您只需要退出应用程序(这会带来很多安全后果 - 例如,用户再次单击登录,他们将自动登录),您只需退出 Cookie 身份验证方案(这将导致身份 cookie 被丢弃),请参阅:https://github.com/AzureAD/microsoft-identity-web/blob/master/src/Microsoft.Identity.Web.UI/Areas/MicrosoftIdentity/Controllers/AccountController.cs#L108 了解 Microsoft 在 Microsoft.Identity.Web 中的具体实现。

只需在您的控制器中创建一个注销端点并执行以下操作:

return SignOut(
    new AuthenticationProperties
    {
        RedirectUri = callbackUrl,
    },
    CookieAuthenticationDefaults.AuthenticationScheme
);

但是,我敦促您重新考虑这样做,单点注销确实有很多安全优势。

【讨论】:

  • 这会从浏览器中清除 cookie,但不会让我退出我的应用程序。我无需登录即可访问该应用程序。
  • 我认为您可能需要提供更多详细信息:它是单页应用程序还是 MVC/Razor 页面或 Blazor(服务器端或客户端)?当您点击注销时,它会清除正确的 cookie,因为用户会话(在 Razor 页面和 MVC 的情况下)存储在 Cookie 中。可能发生的情况是,在注销后,您最终会进入一个需要身份验证的页面,因此由于使用 SSO,您会再次登录...
  • 更新了我的问题。希望这是有道理的
猜你喜欢
  • 2019-02-23
  • 2015-04-03
  • 2023-03-07
  • 2015-11-17
  • 1970-01-01
  • 2019-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多