从内部网站为 ASP.NET Core 添加用户
Posted
技术标签:
【中文标题】从内部网站为 ASP.NET Core 添加用户【英文标题】:Add users for ASP.NET Core from internal website 【发布时间】:2021-11-02 07:00:27 【问题描述】:抱歉,这里没有代码,因为我正在寻找更好的想法,或者我是否在正确的轨道上?
我有两个网站,我们称它们为 A 和 B。
A是一个暴露在互联网上的网站,只有拥有有效账号的用户才能访问。
B 是一个内部(Intranet)网站(使用 Active Directory 进行 Windows 身份验证)。我希望应用程序 B(内联网)为应用程序 A 创建用户。
应用程序 A 正在使用内置的 ASP.NET JWT 令牌身份验证。
我的想法是在外网网站 (A) 上公开一个 Api 并让 (B) 访问这个 API。我可以使用 CORS 来确保只有 (B) 可以访问端点,但我不确定这是否是一个足够好的保护?我们将执行第三方公司的安全渗透测试,所以这可能无法通过安全测试?
或者
我可以使用实体框架手动更新 AspnetUsers 表。不知道这是否可行或正确的方式或做事。
还有其他解决方案吗?
【问题讨论】:
有人有想法吗? 您的身份存储在哪里/什么是托管用户信息的身份验证请求被验证的地方?有注册新用户的API吗? Asp.net 核心用户认证是在外网应用 A 上实现的。不,我们没有注册新用户 api。 嗯,你在谈论服务到服务的交互。如果你有 IdentityServer 或类似的东西,你可以尝试实现单独的 OAuth 客户端来与 B 一起工作。不要以某种方式将 A 的 API 暴露给互联网或明确禁止它,这是可行的 identityserver4.readthedocs.io/en/latest 用于 C# 的 OAuth 【参考方案1】:在我看来,不要将您的内部义务暴露给外部解决方案,例如实现 API 等...
只需共享数据库以供 B 访问。这样,服务器管理是唯一的安全问题,没有人知道您的工作方式。此外,如何为每一个实现用户身份验证(无论是 Windows 身份验证还是 JWT)并拥有独立的基础架构并不重要。
【讨论】:
我正在考虑这个,但我可能会遇到代码耦合的设计问题。我正在学习一个内部 api,它可以被应用程序 A 调用但不会暴露在互联网上。 @ove 只需创建一个用户并授予访问 A 数据库中所需表的访问权限。它有设计问题吗?! 在安全方面可以做得更好,但在单一职责原则方面就很糟糕了。因此,这种方法不可靠且难以支持【参考方案2】:它们是针对这一问题的多种解决方案。然后结束它真的取决于你的具体标准。
你可以选择:
B(Intranet)网站,进入数据库并根据需要创建用户。 一个(互联网)网站,其 API 公开了创建用户所需的端点。 一个(互联网)网站,不时运行数据迁移以插入用户。但它们都有起起落落,我会尽力为你分解它们。
API解决方案
上升:
单一职责,您只需一段代码接触此数据库,从而更容易减轻副作用 “面向未来”,您可以使用此 api 轻松获得更多服务。下降:
攻击面增加,API 公开,因此受第 3 方尝试使用它的影响。 在数据库模型更改时维护 API(需要维护的部分) 不是实施最快的解决方案。数据库直接访问
上升:
攻击面最小。 开发速度非常快下降:
数据库模型必须维护两次 迁移 + 部署必须协调,难以维护。 使系统更容易出错。发布时迁移
上升:
开发成本最低 刀片性能最高下降:
不灵活 对用户来说非常慢 许多部署 手工工作(随着时间的推移会很昂贵)在我看来,我建议您使用 API,使用 OAuth 机制保护 API 访问。实施 OAuth 太费时了。也许你可以尝试一些更简单的 Auth 协议。
【讨论】:
那些只是想到的,我当然不会涵盖所有内容。这是我对你的问题的看法。以上是关于从内部网站为 ASP.NET Core 添加用户的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Core 2.0 中 Web API 的本地用户帐户存储
使用 JWT 令牌的 ASP.NET Core 网站到 WebApi 身份验证