【问题标题】:One authentication API to many other API microservices一个身份验证 API 到许多其他 API 微服务
【发布时间】:2019-01-01 01:19:30
【问题描述】:

我的计划是在 .Net Core 2.1 中构建一些独立的 WebApi 后端应用程序。我还想拥有一个大型前端应用程序(内置 Angular),它将使用对上述微服务的调用。

所以,在前端应用程序中,我将有一些模块: 登录 , MicroSrv1 , MicroSrv2 , ...等

登录 GUI 将使用 LoginApi。登录后,我想显示 MicroSrv1 GUI (connected to MicroSrv1 Api) 、 MicroSrv2 (to MicroSrv2 Api) 等等。

我的想法是:

  • 打开LoginGUI点击登录
  • 调用 LoginApi 以在 Azure AD 中进行身份验证(使用 JWT)并下载用户数据和用户角色并返回到 LoginGUI
  • 身份验证后,我将使用 MicroSrv1GUI、MicroSrv2GUI 进入下一个面板
  • 接下来对 MicroSrv1 Api 或 MicroSrv2 Api 的调用应该是授权的(所以也发送令牌,可能存储在 cookie 中)

这是一个好习惯吗?只有一个单独的微服务进行身份验证?还是每个微服务都应该内置自己的? 如何在微服务之间共享身份验证令牌并仅使用一个 Login Api 应用程序?可以给我举几个例子吗?

【问题讨论】:

  • 这与 Angular 无关,我正在删除标签
  • 您可能只想使用外部身份验证,例如使用/修改像 IdentityServer4 这样的令牌服务器

标签: .net api .net-core microservices


【解决方案1】:

从身份验证服务中,您将根据用户角色和与之关联的权限返回一个 JWT 令牌。

在客户端,您将解析 JWT 令牌并根据权限,您将只显示适用于用户的屏幕,而在服务器端,您将读取每个 REST 调用的访问权限,并且如果用户尝试在没有正确访问权限的情况下访问服务,则会出现未经授权的错误

【讨论】:

    【解决方案2】:

    我不明白为什么每个微服务都有一个 GUI,但是你可以通过使用共享数据保护密钥为每个微服务添加身份验证来实现这一点。

    您可以通过将数据保护配置为使用共享文件夹作为密钥存储来实现这一点,或者实现您自己的一个共享存储。

    【讨论】:

    • 抱歉,我想要一个带有独立模块的 GUI 应用程序,每个模块将使用单独的 API。
    • 但我认为你的意思不是一个常见的解决方案。是否已经实现了?
    • 是的,您可以找到共享数据保护存储的文档,其中一些是开箱即用的。如果您有负载均衡器并且您的两个 api 具有相同的密钥,则使用此技术,这几乎是相同的情况。
    猜你喜欢
    • 2014-05-04
    • 2018-11-29
    • 2020-04-05
    • 2020-04-30
    • 2014-12-20
    • 2015-09-10
    • 2020-09-25
    • 2020-02-05
    • 2019-07-23
    相关资源
    最近更新 更多