C# ASP.NET样板多服务

C# ASP.NET样板多服务,c#,asp.net,aspnetboilerplate,C#,Asp.net,Aspnetboilerplate,早上好 我试图理解扩展ASP.Net样板文件的正确方法,创建使用相同身份验证和授权(如JWT)的多个web服务,以及底层框架 例如,我希望构建主Web API,使其在/API/webapp1上具有起始端点 要在/api/webapp2上启动的第二个服务 要在/api/webapp3上启动的第三个服务 第四个在/api/webapp4上启动的服务-可能需要在.Net标准而不是核心上运行 我不想构建一个单一的web应用程序,因为我可能希望我的一个或一些web服务在Windows上运行,因为它可能有依

早上好

我试图理解扩展ASP.Net样板文件的正确方法,创建使用相同身份验证和授权(如JWT)的多个web服务,以及底层框架

例如,我希望构建主Web API,使其在/API/webapp1上具有起始端点 要在/api/webapp2上启动的第二个服务 要在/api/webapp3上启动的第三个服务 第四个在/api/webapp4上启动的服务-可能需要在.Net标准而不是核心上运行

我不想构建一个单一的web应用程序,因为我可能希望我的一个或一些web服务在Windows上运行,因为它可能有依赖项,而代码库的其余部分可以在Linux等上运行


应用程序和项目的最佳方式是什么?我正在努力减少代码重复(干)。我目前的想法是复制web.host项目,但我是否应该创建一个单独的web服务来完全管理身份验证?

创建四个.NET 5.0 WebAPI,您可以在Linux和Windows上运行它们。当涉及到身份验证时,假设您使用的是openid Connect,那么在每个服务中用六行代码实现基本JWT就非常容易了

services
    .AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(o =>
    {
        o.Authority = "https://localhost:5001";
    });
您只需通过设置权限将身份验证中间件指向OpenIDConnect服务器即可。它将为您验证令牌并填充
ClaimsPrincipal
。NET 5.0和.NET Core为交叉关注点提供了如此简单的配置,这就是为什么我说您可以轻松地将应用程序拆分为四个API,并且仍然符合DRY。为共享的东西添加一个额外的项目也是一个好主意,但是不要添加太多,这样整个系统就不会退化为一个整体伪装的分布式系统

我应该创建一个单独的web服务来完全管理身份验证吗

这是一个好主意,我甚至会把它远远超出,并建议不要做登录逻辑,存储密码等自己,但使用一些现有的解决方案,实现开放式Id连接,如IdentityServer4或KeyClock

如果您希望所有这些应用程序都位于同一地址下,例如/api路由。您可以使用Ocelot作为API网关

顺便说一句,您不能在.netstandard上运行API。它必须是Framework、Core或5.0