繁体   English   中英

使用联合身份提供程序强制用户在 Azure AD B2C 中注销

[英]Force user sign out in Azure AD B2C with federated identity provider

我们正在使用 Azure AD B2C 构建 Blazor WASM 应用程序,以使用用户流执行身份验证(无自定义策略)。 我们公司的 Active Directory 充当我们的联合身份提供者。 换句话说,用户将使用他们的域帐户登录。 此应用程序用于在多个用户之间共享的平板电脑上,然后他们必须每天多次注销/登录。

我们现在面临的问题是,用户注销后,登录提示就再也没有出现过。 默认情况下,前一个用户总是经过身份验证,这是有道理的,因为我们不会为其他应用程序注销用户。 但是,在我们的例子中,我们需要让用户每次都提示,因为有多个用户正在使用该应用程序。

我们可以看到的一件事是会话似乎由“login.microsoftonline.com”cookie 保留,当从浏览器中手动删除该 cookie 时,我们现在会看到用户凭据的提示。

我的问题是,有没有办法强制每次都显示登录提示? 或者,只能退出应用程序?

我们尝试从用户流中将“已禁用”置于“单点登录配置”设置中,但没有成功。 根据看起来我们需要但似乎不起作用的文档。

我们还禁用了“启用让我保持登录会话”选项,但同样没有成功。

这是我的 AddMsalAuthentication:

 builder.Services.AddMsalAuthentication<RemoteAuthenticationState, CustomUserAccount>(options => {
        builder.Configuration.Bind("AzureAdB2C", options.ProviderOptions.Authentication);
        options.ProviderOptions.DefaultAccessTokenScopes.Add("openid");
        options.ProviderOptions.DefaultAccessTokenScopes.Add("offline_access");
        options.ProviderOptions.LoginMode = "redirect";
        options.UserOptions.RoleClaim = "roles"; 
    }).AddAccountClaimsPrincipalFactory<RemoteAuthenticationState, CustomUserAccount, CustomClaimsPrincipalFactory>();

有任何想法吗? 谢谢

目前,这只能使用自定义策略来实现。 您需要使用Input Claims向 Idp 发送prompt=login查询参数。

如果您需要其他帮助,请告诉我们。

您可以使用Microsoft.AspNetCore.Components.WebAssembly.Authentication而不是Microsoft.Authentication.WebAssembly.Msal发送其他查询参数prompt=login将用户重定向到 IDP 而不是使用缓存的令牌。

需要执行以下步骤:

安装 nuget 包Microsoft.AspNetCore.Components.WebAssembly.Authentication

wwwroot > index.html中的 AuthenticationService.js 脚本从 Msal 替换为下面的脚本。

<script src="_content/Microsoft.AspNetCore.Components.WebAssembly.Authentication/AuthenticationService.js"></script>

将 Program.cs 中的 AddMsalAuthentication 一段代码替换为这段代码。

builder.Services.AddOidcAuthentication<RemoteAuthenticationState, RemoteUserAccount>(options => {
            builder.Configuration.Bind("app", options.ProviderOptions);
            
            // Prompt for credentials when redirect to login endpoint
            options.ProviderOptions.AdditionalProviderParameters.Add("prompt", "login");

            // Based on your IDP
            options.ProviderOptions.DefaultScopes.Clear();
            options.ProviderOptions.DefaultScopes.Add("openid");
            options.UserOptions.RoleClaim = "roles";
            options.ProviderOptions.ResponseType = "id_token";
        });

这样做的全部原因是 Msal 不允许发送额外的查询参数。 这仍然是一种解决方法,因为它仍然不清除“login.microsoftonline.com”cookie,但它确实实现了类似的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM