.NET 7 有一个模板,可以创建托管在常规 Web 应用程序内的 Blazor WebAssembly 应用程序。这种设置的优点是所有客户端代码都在客户端运行,服务器可以执行服务器任务,例如向客户端提供 API。它就像任何其他 SPA 后端设置 - 但具有完整的 C# 好东西 jar 和 VS 支持的对浏览器中运行的 WASM .NET Core 代码的调试。
现在新的服务器交互性很好,但我需要将客户端的身份验证与服务器完全分开。
我的设置如下:服务器在 Windows 上运行,所有客户端也都在 Windows 上 - 在同一个域中,我想利用旧的 NTLM 身份验证,但要有一点先见之明,通过“翻译” 协商结果以及 JWT 令牌的目录身份组成员身份。
为此,我有一个端点,它使用协商身份验证并返回 JWT 令牌,其中选定的组成员身份作为角色。从现在起,代币是唯一重要的事情。
但是,要使其发挥作用,客户端必须调用该端点。然后,它可以使用收到的令牌来设置客户端身份验证状态,并将该令牌用作对服务器公开的 API 的所有后续调用作为不记名令牌。
据我所知,这些新的交互模式只涉及渲染。即使涉及 WebAssembly,逻辑似乎也完全在服务器端运行。并且代表客户端进行调用的服务器破坏了我基于 NTLM 的流程。而且工作负载中没有类似于 .NET 7 中的模板的 (factory) 模板。PWA 也仅适用于独立的 Blazor WASM 项目,如果所有逻辑都保留在服务器端,那么这是有意义的。
UseBlazorFrameworkFiles
扩展方法,因此一切都已给出。Blazor.BFF.AzureAD.Template
看起来很相似,但专为 EntraId 量身定制。我能想到的最好办法是在新创建的 .NET 7 解决方案上使用 升级助手。
致@mrc-aka-肖恩-柯蒂斯
请参阅下面与我的评论相关的图片。这在 .NET 7 版本中绝对合法,因为客户端和服务器项目有明确的分离。使用您建议的干净项目进行了以下尝试:具有 WebAssembly 渲染和全局交互性的标准 Blazor Web 应用程序。
(添加为作用域在这里没有区别。)
我注入该服务的唯一方法是在客户端和服务器上注册。当我从组件调用服务代码时,日志位于服务器端,而不是客户端:
这完全不是 .NET 7 模板的工作原理。
亲爱的@marc_s:WebAssembly 不是 Web Assembly(请参阅:https://web assembly.org/),请不要编辑您不熟悉的内容!
您可以为此使用新的 Blazor Web 应用模板。将所有客户端代码放入客户端项目中,并将渲染模式设置为 WebAssembly。 您提到的错误和问题对于您所说的尝试过的设置来说没有意义。
另一方面,如果您想要旧模板,
dotnet new blazorwasm
,它仍然存在。 https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-new-sdk-templates#blazorwasm