[英]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.