gpt4 book ai didi

asp.net - 在 ASP.NET Blazor Web Assembly 客户端应用程序中使用 Auth0 注销后出现登录提示

转载 作者:行者123 更新时间:2023-12-05 01:36:26 26 4
gpt4 key购买 nike

我刚刚开始构建一个简单的 Web 程序集 ASP.NET 客户端 Web 应用程序,其身份验证由 Auth0 提供支持。

我发现有几篇文章可以引导您完成执行此操作所需的步骤,例如这篇文章:https://auth0.com/blog/what-is-blazor-tutorial-on-building-webapp-with-authentication/

不幸的是,由于其中许多已编写,Blazor 客户端项目似乎已从面向 .NET Core 移植到 .NET Standard,因此无法安装所需的 NuGet 包:Microsoft.AspNetCore。认证.OpenIdConnect

相反,我从 Microsoft 找到了一个使用 Microsoft.AspNetCore.Components.WebAssembly.Authentication 的教程,它包装了一些处理身份验证流程所需的 Javascript 代码: https://learn.microsoft.com/en-us/aspnet/core/security/blazor/webassembly/standalone-with-authentication-library?view=aspnetcore-3.1

我设法使其正常工作,但是当我注销并再次登录时,该应用程序会自动进行身份验证,而无需将我带到 Auth0 登录页面。根据OpenID Connect specification我需要发送一个可选的 prompt 参数设置为 login 以强制显示登录屏幕(注销后我作为用户所期望的)。

前面提到的 Microsoft.AspNetCore.Authentication.OpenIdConnect 库可以设置这个参数:https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.authentication.openidconnect.openidconnectoptions.prompt?view=aspnetcore-3.0

据我所知,WebAssembly 库没有:https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.components.webassembly.authentication.oidcprovideroptions?view=aspnetcore-3.1

有人知道解决方法吗?

我的Program.cs如下:

public class Program
{
public static async Task Main(string[] args)
{
var builder = WebAssemblyHostBuilder.CreateDefault(args);
builder.RootComponents.Add<App>("app");

builder.Services.AddTransient(sp => new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

builder.Services.AddOidcAuthentication(options =>
{
options.ProviderOptions.Authority = $"https://{builder.Configuration["Auth0:Domain"]}";
options.ProviderOptions.ClientId = builder.Configuration["Auth0:ClientId"];
options.ProviderOptions.ResponseType = builder.Configuration["Auth0:ResponseType"];
options.ProviderOptions.PostLogoutRedirectUri = "/";
});

await builder.Build().RunAsync();
}
}

最佳答案

我发现我需要显式调用 logout 端点: https://auth0.com/docs/api/authentication?javascript#logout

现在我已经创建了一个 Logout 组件并在其中添加了逻辑 - 我希望有更好的方法(例如,将其配置为 AddOidcAuthentication 的一部分,但我不能'想不通)。

@inject NavigationManager Navigation
@inject SignOutSessionStateManager SignOutManager
@inject BaseAddress BaseAddress
@inject Auth0Config Auth0Config

<AuthorizeView>
<Authorized>
<button class=@($"{CssClass} btn btn-link") @onclick=BeginSignOut>Log out</button>
</Authorized>
</AuthorizeView>

@code {

[Parameter]
public string CssClass { get; set; }

private async Task BeginSignOut()
{
await SignOutManager.SetSignOutState();
Navigation.NavigateTo($"{Auth0Config.Authority}/v2/logout?client_id={Auth0Config.ClientId}&returnTo={BaseAddress.Url}authentication/logout");
}
}

关于asp.net - 在 ASP.NET Blazor Web Assembly 客户端应用程序中使用 Auth0 注销后出现登录提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61987616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com