Blazor WebAssembly中的OpenIDConnect,带有IdentityServer4+ASP.NET



我正在尝试创建一个IdentityServer4+ASP.NET Core Identity后端,以处理访问/刷新令牌和用户/签名管理。在某个时间点,我还将创建一个web API,因此我需要访问令牌。我的前端是Blazor WebAssembly。

在我阅读的几乎每一本指南/教程中,我都指向使用Open ID Connect授予授权代码。然而,当我实现这一点时,我会从用户登录页面重定向到不同端口上的identityserver登录页面,如下所示:

services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.SignInScheme = "Cookies";
options.Authority = "https://localhost:5000";
options.RequireHttpsMetadata = false;
options.ClientId = "mvc";
options.SaveTokens = true;
});

在本例中,我的identityserver在localhost:5000上运行,我的blazor在localhost:5003上运行。我希望用户能够在同一域上使用Blazor Webassembly的前端UI登录,我该怎么做?

@enet是的,这正是我想要的。我知道我也可以编辑登录页面,让它看起来像我想要的那样,但我不想为此离开blazor wasm的域

实际上,您希望避免重定向到IdentityServer4服务器,但遗憾的是,重定向是OpenID Connect流的核心。。。

在Blazor团队创建当前的WebAssembly身份验证系统之前,我只能考虑一个常见的解决方案:使用JWT令牌身份验证。。。

执行以下操作:

  • 创建一个WebAssembly托管的应用程序
  • 创建登录页面、注册页面等

使用WebAssembly托管的应用程序,前端(浏览器(和后端(服务器(属于同一域。您可以将帐户控制器添加到具有登录终点的Controllers文件夹中,该登录终点将使用HTTP调用从前端访问,用户凭据由您的登录页面收集。登录端点中的代码应该验证用户,可能使用身份系统(默认(,然后创建一个JWT令牌,将其传递到前端(可能存储在本地存储中(。现在,每当您想要访问受保护的web api端点时,都可以将JWT令牌添加到HttpClient对象的头中。

注:由于需要时间和知识,我不建议采用此方法。当然,这是可行的,这就是我们以前编码的方式。

我没有太多时间按顺序详细回答你的问题,所以如果你有问题,请不要犹豫。

感谢您的回复!也许我就是不明白。。。如果我想登录到任何其他网站,我永远不会重定向到其他域登录。这是否意味着所有这些网站都不使用OIDC?

如果你所说的是正确的,那么答案是肯定的。OpenID Connect的流需要重定向。您不能也不应该在客户端(浏览器(上对用户进行身份验证。例如,如果您使用OpenID Connect,您可以将他重定向到像IdnetityServer4这样的身份提供商,或者执行HTTP调用将用户的凭据发送到Web Api端点进行身份验证,返回JWT令牌。还有其他对用户进行身份验证的方法,但都不是在前端进行的。如果您想要您的web应用程序以及为该应用程序提供服务并包含WebApi端点的服务器,您应该考虑我上面的建议。请注意,这是一个可行的解决方案,我并不是真的想阻止你采用它;关键是Blazor为您提供了令人惊叹的功能,经过良好的测试和保护,这主要需要您配置一些设置等,而自己实现它需要一些知识和时间。当然,您可以找到Blazor的JWT令牌身份验证示例。

相关内容

  • 没有找到相关文章

最新更新