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

如何在Blazor Server应用中实现Microsoft Identity无账户选择程序化登出

Blazor Server 基于Microsoft Identity Platform无账号选择框程序化登出实现方案

问题根源

  • 仅调用Cookie scheme登出:只会清除本地应用的登录Cookie,微软身份平台侧的用户会话仍然有效,所以刷新页面后会触发SSO自动重新登录
  • 仅调用OIDC scheme登出但未携带账号标识:微软身份平台无法确认要注销的账号,因此弹出账号选择框

实现步骤

步骤1:配置身份选项保存ID令牌

首先需要在服务注册时开启令牌保存,以便后续获取id_token作为登出的账号标识,代码如下:

builder.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApp(options =>
    {
        builder.Configuration.Bind("AzureAd", options);
        // 关键配置:保存id_token到用户身份属性中
        options.SaveTokens = true;
    });

步骤2:编写正确的登出逻辑

登出时需要同时处理本地Cookie注销和微软身份平台的远程会话注销,并且携带id_token_hint参数告知平台要注销的账号,避免弹出选择框,代码示例:

app.Use(async (context, next) =>
{
    if (context.Request.Path.Equals("/logout", StringComparison.OrdinalIgnoreCase))
    {
        // 先从已保存的令牌中获取id_token
        var idToken = await context.GetTokenAsync("id_token");
        
        // 配置登出参数,携带id_token和登出后跳转地址
        var authProperties = new AuthenticationProperties
        {
            RedirectUri = "/",
            Parameters =
            {
                ["id_token_hint"] = idToken
            }
        };

        // 同时登出Cookie和OIDC两个认证方案
        await context.SignOutAsync(new[] 
        {
            CookieAuthenticationDefaults.AuthenticationScheme,
            OpenIdConnectDefaults.AuthenticationScheme
        }, authProperties);
        return;
    }
    await next();
});

注意:登出后跳转的地址需要在Azure AD应用注册的「重定向URI」中配置为Web类型的登出重定向URI,否则微软身份平台会拒绝跳转请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:06:03