.net 使用外部身份验证提供程序生成用户凭据,使用专用标识服务器生成令牌

.net 使用外部身份验证提供程序生成用户凭据,使用专用标识服务器生成令牌,.net,api,azure,authentication,identityserver4,.net,Api,Azure,Authentication,Identityserver4,我正在设计一个安全后端,它应该为多个客户端提供令牌,以保护许多API。用户数据库位于Azure B2C中。 我想创建包含基于用户访问的不同声明的API令牌。例如:用户A应该能够调用/api/stores/11,但不能调用/api/stores/12 用例: 一个应用程序(ipad),直接进入Azure B2C进行用户登录和令牌生成。使用此令牌调用API以进行用户配置文件社交交互等 将调用相同API(不同模块)且具有访问权限限制的外部系统。外部系统将有管理员,他们也将从Azure B2C获得凭据

我正在设计一个安全后端,它应该为多个客户端提供令牌,以保护许多API。用户数据库位于Azure B2C中。 我想创建包含基于用户访问的不同声明的API令牌。例如:用户A应该能够调用/api/stores/11,但不能调用/api/stores/12

用例:

  • 一个应用程序(ipad),直接进入Azure B2C进行用户登录和令牌生成。使用此令牌调用API以进行用户配置文件社交交互等
  • 将调用相同API(不同模块)且具有访问权限限制的外部系统。外部系统将有管理员,他们也将从Azure B2C获得凭据
到目前为止,我的解决方案是:

  • IdentityServer4(),调用Azure B2C登录以验证用户凭据
  • 身份验证完成后(回调时),IdentityServer将为外部系统应用用户拥有的任何声明(访问权限等),然后生成令牌。IdentityServer将有一个本地数据库,用于连接具有访问权限的用户ID/电子邮件
  • API将使用多租户身份验证提供程序来支持来自Azure B2C的令牌和我的“中间”标识服务器。提供程序分别是IdentityServerAuthentication和OpenIdConnectAuthentication
  • 我的问题是,这是否是一个可行的解决方案?是不是太复杂了?在这种情况下,您会采取什么不同的做法?我不想实现第二次用户登录,Azure B2C似乎不支持细粒度的访问权限


    先谢谢你

    这在IdentityServer 4中非常可行。可以满足您的用例。我建议查看。

    这在IdentityServer4中非常可行。可以满足您的用例。我建议您查看。

    这实际上是一种非常常见的体系结构

    核心身份和代币平台归您所有,这是唯一明智的做法

    然后,您可以使用任何机制(在您的案例中是Azure B2C)进行身份验证。将来可能需要添加一个包含用户的本地数据库或其他身份验证机制。那很好

    重要的一点是,您的应用程序并不关心这一点。他们只知道你的平台(在你的例子中是使用identityserver构建的)。如果您决定某一天您需要更改您的身份验证提供程序-那很好。您的应用程序不会受到这一事实的影响


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

    这实际上是一种非常常见的体系结构

    核心身份和代币平台归您所有,这是唯一明智的做法

    然后,您可以使用任何机制(在您的案例中是Azure B2C)进行身份验证。将来可能需要添加一个包含用户的本地数据库或其他身份验证机制。那很好

    重要的一点是,您的应用程序并不关心这一点。他们只知道你的平台(在你的例子中是使用identityserver构建的)。如果您决定某一天您需要更改您的身份验证提供程序-那很好。您的应用程序不会受到这一事实的影响


    此时,您的应用程序和服务只需信任来自identityserver的令牌即可-identityserver负责与外部各方建立信任关系。

    谢谢,我已经查看了示例,使用Google Auth的示例具有相同的设置。我想知道您是否愿意在生产环境中使用它。这意味着要检查Google令牌和ID4令牌,这是一种相当正常的模式。您依赖于其他(受信任的)身份提供者来为您的应用程序需求进行用户声明。在您的情况下,您将使用Azure B2C在您的应用程序中断言的关于当前用户的真实信息。您所说的“这意味着检查Google令牌以及ID4令牌”是什么意思?请看我的答案。@leastprivilege我指的是API中的多租户。谢谢,我已经查看了示例,使用Google Auth的示例具有相同的设置。我想知道您是否愿意在生产环境中使用它。这意味着要检查Google令牌和ID4令牌,这是一种相当正常的模式。您依赖于其他(受信任的)身份提供者来为您的应用程序需求进行用户声明。在您的情况下,您将使用Azure B2C在您的应用程序中断言的关于当前用户的真实信息。您所说的“这意味着检查Google令牌以及ID4令牌”是什么意思?请看我的答案。@leastprivilege我指的是API中的多租户。非常感谢!我唯一关心的是,如果应用程序指向ID4,应用程序用户如何从其本机应用程序登录?然后ID4将重定向到Azure B2C,然后它们可能不会被发送回应用程序。我不太了解本地应用程序的行为,所以如果我不清楚,我会很抱歉。ID4在中间是透明的。都是配置问题。非常感谢!我唯一关心的是,如果应用程序指向ID4,应用程序用户如何从其本机应用程序登录?然后ID4将重定向到Azure B2C,然后它们可能不会被发送回应用程序。我不太了解本地应用程序的行为,所以如果我不清楚,我会很抱歉。ID4在中间是透明的。所有这些都是配置问题。