【问题标题】:Use of external authentication provider for user credentials, private IdentityServer for token generation使用外部身份验证提供程序获取用户凭据,使用私有 IdentityServer 生成令牌
【发布时间】:2016-08-30 13:53:55
【问题描述】:

我正在设计一个安全后端,它应该为多个客户端提供令牌以保护多个 API。用户数据库位于 Azure B2C https://azure.microsoft.com/en-us/services/active-directory-b2c/。 我想创建包含基于用户访问权限的不同声明的 API 令牌。例如:用户 A 应该能够调用 /api/stores/11,但不能调用 /api/stores/12。

用例:

  • 直接进入 Azure B2C 以进行用户登录和生成令牌的应用程序 (ipad)。使用此令牌调用 API 以进行用户个人资料社交互动等。
  • 将调用具有访问权限限制的相同 API(不同模块)的外部系统。外部系统将有管理员,他们也将从 Azure B2C 获取凭据。

到目前为止我的解决方案:

  1. IdentityServer4 (https://github.com/IdentityServer/IdentityServer4) 调用 Azure B2C 登录来验证用户凭据。
  2. 一旦身份验证完成(回调),IdentityServer 将应用用户对外部系统拥有的任何声明(访问权限等),然后生成令牌。 IdentityServer 将有一个本地数据库,该数据库将用户 ID/电子邮件与访问权限连接起来。
  3. API 将使用多租户身份验证提供程序来支持来自 Azure B2C 的令牌和我的“中间”IdentityServer。提供者分别是 IdentityServerAuthentication 和 OpenIdConnectAuthentication。

我的问题是这是否是一个可行的解决方案?是不是太复杂了?在这种情况下你会做些什么不同的事情?我不想实现第二个用户登录,Azure B2C 似乎不支持细粒度的访问权限。

提前谢谢你。

【问题讨论】:

    标签: .net api azure authentication identityserver4


    【解决方案1】:

    这其实是一种很常见的架构。

    核心身份和令牌平台归您所有 - 这是唯一明智的做法。

    然后,您可以使用任何机制(在您的情况下为 Azure B2C)进行身份验证。将来您可能希望添加带有用户的本地数据库或其他一些身份验证机制。这完全没问题。

    重要的一点是 - 您的应用程序并不关心这些。他们只知道您的平台(在您使用身份服务器构建的情况下)。如果您决定有一天您需要更改您的身份验证提供程序 - 那很好。您的应用程序不受这一事实的影响。

    此时,您的应用和服务只需要信任来自身份服务器的令牌 - 身份服务器负责与外部各方代理信任。

    【讨论】:

    • 非常感谢!那么我唯一关心的是如果应用程序指向 ID4,应用程序用户如何从他们的本机应用程序登录/注册?然后 ID4 将重定向到 Azure B2C,然后它们可能不会被发送回应用程序。我不太了解本机应用程序的行为,所以如果我不清楚,我很抱歉。
    • ID4 会在中间是透明的。都是配置问题。
    【解决方案2】:

    这对于 IdentityServer4 来说是非常可行的。可以满足您的用例。我建议查看samples。

    【讨论】:

    • 谢谢,我查看了示例,使用 Google Auth 的示例具有相同的设置。我想知道你是否会在生产环境中这样做。这意味着要检查 Google 令牌和 ID4 令牌。
    • 这是一个相当正常的模式。您依赖其他(受信任的)身份提供者来满足您的应用程序需求的用户声明。在您的情况下,您将使用 Azure B2C 断言的关于应用程序中当前用户的真实内容。
    • “这意味着检查 Google 令牌和 ID4 令牌”是什么意思?看我的回答。
    • @leastprivilege 我的意思是 API 中的多租户。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2015-04-11
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2015-10-24
    相关资源
    最近更新 更多