将 Microsoft OAuth 身份验证限制为仅对 Web 应用程序进行身份验证,而不是对所有 Microsoft 服务进行身份验证

Limit Microsoft OAuth authentication to only authenticate webapplication, not all microsoft services

我正在为一个网站使用 firebase,用户可以在其中通过 OAuth 2.0 使用他们的 Microsoft 帐户登录:

import {getAuth, signInWithRedirect, OAuthProvider} from "firebase/auth";

(...)

const provider = new OAuthProvider('microsoft.com');
const auth = getAuth();
signInWithRedirect(auth, provider);

它使用重定向工作流程提示 Microsoft 单一登录。

身份验证与 firebase 配合得很好,除了一个细节: 当我在 Web 应用程序的浏览器中使用 Microsoft 帐户登录时,我也在后台 登录了我完整的 Office 365 帐户和其他潜在的 Microsoft 站点。

因此,如果我打开一个新选项卡并转到我的 Outlook 365 在线邮件,那么我已经登录了,因为我登录了我的网络应用程序。如果我碰巧忘记从 Web 应用程序注销,我的整个邮箱、日历以及所有 Microsoft 帐户信息都会暴露。

我查看了我设置 application/tenant id 的 Azure 门户中的所有页面和设置,查看了范围并查看了 Mirosoft 文档中的 OAuth 2.0 参数,但我找不到任何东西关于这个问题。

单点登录最初是为了方便用户,但就我而言,作为安全措施我想阻止它。

如何将 Microsoft 登录限制为仅在 webapp/firebase 项目中进行身份验证,而不在其他项目中进行身份验证?

简单的答案是 - 你不能那样做。

SSO 正是它的意思 - 单一 Sign-On。用户登录一次,无需再次认证即可使用不同的应用。您要求 Microsoft 为您验证用户的身份。 Microsoft 让用户登录并返回答案。但这意味着,用户将能够在此浏览器上使用其他 Microsoft 服务,因为他们已经验证了自己的身份。

您唯一能做的就是告知您的用户安全风险并告诉他们确保在工作结束时注销(然后您也可以在 Microsoft 注销他们)。

如果 MS 支持反向通道启动的注销,那么您可以尝试执行一些操作来检查您的用户会话是否仍处于活动状态,如果不是,则在 MS 上启动注销。不过不知道支持不支持