c# - ASP.NET Boilerplate 多个服务
问题描述
早上好,
我试图了解扩展 ASP.Net Boilerplate 的正确方法,以创建使用相同身份验证和授权(如 JWT)和底层框架的多个 Web 服务。
例如,我想构建主 Web API 以在 /api/webapp1 上启动端点 第二个服务在 /api/webapp2 上启动 第三个服务在 /api/webapp3 上启动第四个服务在 /api/webapp4 上启动 - 也许这需要在.Net 标准而不是核心上运行?
我不想构建一个单一的 Web 应用程序,因为我可能希望我的一个或一些 Web 服务在 Windows 上运行,因为它可能具有依赖项,而其余代码库可以在 Linux 等上运行。
搭建应用程序和项目的最佳方式是什么?我正在尝试尽量减少代码重复(DRY)。我目前的想法是复制 web.host 项目,但我应该创建一个单独的 Web 服务来完全管理身份验证吗?
解决方案
创建四个 .NET 5.0 WebApi,您可以在 Linux 和 Windows 上运行它们。当涉及到身份验证时,假设您使用的是 Open Id Connect,那么在每个服务中使用六行代码来实现基本 JWT 真的很容易。
services
.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(o =>
{
o.Authority = "https://localhost:5001";
});
您只是通过设置授权将身份验证中间件指向您的 Open Id Connect 服务器,仅此而已。它将为您验证令牌并填充ClaimsPrincipal
. .NET 5.0 和 .NET Core 为横切关注点提供了如此简单的配置,这就是为什么我说您可以轻松地将应用程序拆分为四个 API 并且仍然符合 DRY。为共享的东西添加一个额外的项目也是一个好主意,但不要添加太多,这样整个系统就不会退化为一个伪装的分布式系统。
我应该创建一个完全管理身份验证的单独 Web 服务吗?
这是一个好主意,我会更进一步,建议不要自己做登录逻辑、存储密码等,而是使用一些现有的解决方案来实现 Open Id Connect,如 IdentityServer4 或 KeyCloack。
如果您想让所有这些应用程序在例如 /api 路由后面的同一地址下。您可以使用 Ocelot 作为您的 API 网关。
顺便说一句,您不能在 .netstandard 上运行您的 API,它必须是 Framework、Core 或 5.0。
推荐阅读
- mocha.js - 如何将 mocha 错误符号更改为自定义字符串
- grpc - 如何将流量例行到不同的服务版本但具有相同的原型包名称?
- r - 如何在 R 中获得引导分布?
- python - Discord - 如何处理连接丢失错误?
- inheritance - Neo4j Cypher Single Query to WHERE variables“可能”以不同的模式出现
- angular - 如何从 angular2-toaster closeHtml 激活组件功能
- python-3.x - 如何在 python selenium 中获取 onclick href="#"
- r - 基于目标变量创建存储桶
- javascript - 在 addEventListener 的表单内定位多输入
- javascript - 状态更改时更新组件 - 反应