使用外部身份验证提供程序获取用户凭据,使用专用IdentityServer进行令牌生成

时间:2016-08-29 12:34:38

标签: .net api azure authentication identityserver4

我正在设计一个安全后端,它应该为多个客户端提供令牌,以保护许多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。
  4. 我的问题是,这是否是一个可行的解决方案?太复杂了吗?在这种情况下你会做些什么?我不想实现第二个用户登录,Azure B2C似乎不支持细粒度的访问权限。

    提前谢谢你。

2 个答案:

答案 0 :(得分:4)

这实际上是一种非常常见的架构。

核心身份和令牌平台归所有 - 这是唯一理智的事情。

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

重要的是 - 您的应用程序不关心这一点。他们所知道的只是您的平台(在您的情况下使用identityserver构建)。如果您决定有一天需要更改身份验证提供程序 - 那没关系。您的申请不受此事实的影响。

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

答案 1 :(得分:1)

这对IdentityServer4非常有用。您的用例可以照顾。我建议您查看samples