Identity Server 脚手架和 Blazor WebAssembly

Identity Server scaffolding and Blazor WebAssembly

我有一个托管的 Blazor WebAssembly 应用程序,我试图在项目 App.Server 中构建身份服务器。它正在工作,但现在我在 App.Server 中混合了 cshtml 视图文件(本来只是一个 asp 网络核心网络 api)。我发现很难集成 Blazor UI 和 cshtml 文件以获得良好的用户体验。

我期待有一个单独的纯网络 api,带有身份服务器 api 和 Blazor 负责 pages/views 和 api 调用。是否可以将这些 cshtml 移动到 Blazor 并从那里管理页面,或者脚手架已经以这种方式完成,因为不是吗?

不,您不能将那些 Razor Pages 页面移动到您的前端 Blazor。但是您可以以这样一种方式设计它们,即当用户被重定向到登录页面时,登录 Razor 页面页面是 Blazor 前端的一部分。我看过一个这样的例子,必须承认,如果不看源代码,我无法辨别它。

在您的 Blazor 服务器项目中拥有专用的 Web Api 项目或具有 Web Api 端点与身份无关 UI 不属于 Blazor 前端-结束。

I was expecting to have a separate pure web api with identityserver api and Blazor taking care of the pages/views and api calls.

您可以创建一个 Blazor WebAssembly 独立项目,添加一个 Web Api 项目和一个 IdentityServer4 项目,在这种情况下,OpenID Connect 的流程会重定向您想要登录的用户到项目默认模板提供的登录页面,但您仍然可以将页面设计为看起来像是 Blazor 前端的一部分。

唯一能满足你一时兴起的方案就是使用Bearer Authentication;那就是你的 Web Api 为用户生成 Jwt 令牌,这些令牌被传递到你的前端,并存储在本地或会话存储中。在这种情况下,您的登录页面可以是一个 Razor 组件,它从用户那里收集凭据,并通过 Fecth API 将它们传递到 Web Api 适当的端点(这是 Blazor 中的 HttpClient 服务) ... 这是我们在 Blazor 团队创建当前的 Blazor 身份验证系统之前采用的方法。就个人而言,我不建议这样做,除非他精通 Blazor 和其他领域,并且他准备投入大量时间来开发它。我猜你的解决方案应该是欺骗:让用户认为他从未离开过 Blazor SPA 的 space...