如何实现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
相关产品推荐
相关产品推荐

