You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Azure Entra账号登录指定应用后无法自动访问其他应用?

解决方案:隔离Blazor应用的登录会话,避免SSO共享到其他Microsoft 365应用

针对你的场景,核心是要让Entra账号登录Blazor应用后,不生成全局的单点登录(SSO)会话,从而阻止其他应用自动登录。以下是具体可落地的配置方法:

1. 修改Blazor应用的OAuth认证配置,强制独立会话

在Program.cs中调整OpenID Connect的设置,强制每次登录该应用时重新验证,且仅请求自身所需的权限:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        // 强制重新输入凭据,不复用已有SSO会话
        options.Prompt = "login";
        // 清空默认范围,仅保留必要的身份认证范围和当前应用权限
        options.Scope.Clear();
        options.Scope.Add("openid");
        options.Scope.Add("profile");
        options.Scope.Add($"api://{options.ClientId}/access_as_user"); // 替换为你的应用的自定义范围
        // 限制会话Cookie仅在当前应用路径生效
        options.CorrelationCookie.Path = "/";
        options.NonceCookie.Path = "/";
    });

这个配置会让用户登录Blazor应用时,必须重新输入账号密码,且生成的认证会话仅对该应用有效,不会被浏览器中的其他Microsoft 365应用复用。

2. 在Entra ID中配置应用级会话隔离

通过Entra ID的企业应用设置,直接隔离该Blazor应用的登录会话:

  • 登录Azure门户,进入Entra ID -> 企业应用,找到你的Blazor应用
  • 进入会话控制页面,启用会话控制
  • 设置会话类型为仅应用会话,该配置会让应用的登录会话完全独立于全局SSO池,其他同租户应用无法识别并复用该会话。

3. 清理应用的多余权限

确保你的Blazor应用仅请求必要的身份认证权限,避免获取可访问其他应用的令牌:

  • 进入应用注册的API权限页面
  • 删除所有非必要的权限(比如Microsoft Graph的User.Read等,如果你的应用不需要读取用户信息的话)
  • 仅保留openid、profile和应用自身的自定义权限,这样即使令牌被意外获取,也无法用于访问Outlook、Teams等应用。

4. 辅助措施:建议用户使用浏览器容器

虽然是用户端操作,但可以建议员工访问Blazor应用时使用浏览器的专用容器(比如Edge的工作区、Chrome的独立配置文件),进一步隔离会话,降低未授权访问的风险。


内容的提问来源于stack exchange,提问作者Marty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 14:17:08