asp.net-core - Identity Server 脚手架和 Blazor WebAssembly
问题描述
我有一个托管的 Blazor WebAssembly 应用程序,我尝试在项目 App.Server 中搭建身份服务器。它正在工作,但现在我在 App.Server 中混合了 cshtml 视图文件(原本只是一个 asp net core web api)。我发现很难集成 Blazor UI 和 cshtml 文件以获得良好的用户体验。
我期待有一个单独的纯 Web api,其中带有 identityserver api 和 Blazor 来处理页面/视图和 api 调用。是否可以将这些 cshtml 移动到 Blazor 并从那里管理页面,或者脚手架已经这样做了,因为不是吗?
解决方案
不,您不能将这些 Razor Pages 页面移动到前端 Blazor。但是您可以通过这样的方式来设计它们,从而产生这样一种印象,例如,当用户被重定向到登录页面时,登录 Razor 页面页面是 Blazor 前端的一部分。我已经看到了一个例子,并且必须承认我没有看到源代码就无法辨别它。
在 Blazor 服务器项目中拥有一个专用的 Web Api 项目或拥有 Web Api 端点与身份 UI 不是 Blazor 前端的一部分无关。
我期待有一个单独的纯 Web api,其中带有 identityserver api 和 Blazor 来处理页面/视图和 api 调用。
您可以创建一个 Blazor WebAssembly 独立项目,添加一个 Web Api 项目和一个 IdentityServer4 项目,在这种情况下,OpenID Connect 的流程使得您想要登录的用户被重定向到默认模板提供的登录页面项目的一部分,但您仍然可以将页面设计为看起来好像它们是 Blazor 前端的一部分。
唯一可以满足您的奇思妙想的可行解决方案是使用承载身份验证;那就是您的 Web Api 为用户生成 Jwt 令牌,这些令牌被传递到您的前端,并存储在本地或会话存储中。在这种情况下,您的登录页面可以是从用户那里收集凭据的 Razor 组件,并通过 Fecth API(这是 Blazor 中的 HttpClient 服务)将它们传递给 Web Api 适当的端点......这就是我们的方法在 Blazor 团队创建当前的 Blazor 身份验证系统之前采用。我个人不建议这样做,除非他精通 Blazor 和其他领域,并且他准备投入大量时间来开发它。我想你的解决方案应该是欺骗:让用户认为他从未离开过 Blazor SPA 的空间......
推荐阅读
- flutter - Flutter 字段“replyMessage”尚未初始化
- python - 如何在 Python 中使用 mmap 实现文件读取行
- batch-file - 如何在批处理文件的 for 循环中解析一行文本并将各个字符串存储在数组中?
- python - 为什么切割后我的数据值会发生变化?
- java - lambda 表达式如何访问全局范围内的对象?
- unit-testing - 尝试编写执行 Airflow dag 的单元测试
- javascript - TypeError:history.push 不是函数:我该如何解决这个问题?
- php - MySQL 和 PHP 查询在 php web 应用程序中无法正常工作,但在 phpmyadmin 中有效
- python-3.x - 如何让 face_recognition 获得正确的人脸号码?
- go - 为什么 Golang hchan struct 封闭字段使用 uint32 类型?