基于Auth0设计NodeJS微服务IAM方案支持第三方移动应用访问咨询
场景专业术语与通用性说明
这个需求属于非常普遍的B2B2C(Business to Business to Consumer)联合身份授权场景,也可称为合作伙伴用户SSO API访问场景,确实不属于标准B2B(企业员工访问企业服务)场景,核心特征是你需要为第三方合作企业的C端用户提供用户粒度的API访问权限,同时对第三方应用隐藏你方的IAM实现细节。
核心实现架构(第三方应用完全不感知Auth0)
不需要对第三方移动应用做任何Auth0适配,也不需要植入Auth0相关SDK,整体基于Auth0的联邦身份+令牌交换能力实现,核心前置配置如下:
- 在你的Auth0实例中为每个合作企业创建对应的企业IdP连接,支持SAML、OIDC等协议,此时你的Auth0作为该企业IdP的SAML/OIDC SP,完成双方元数据、签名证书的互信配置
- 在Auth0中为每个第三方合作应用创建独立的机密客户端(Confidential Client),开启
OAuth 2.0 令牌交换(Token Exchange)功能,配置该客户端可访问你的NodeJS微服务对应的API资源 - 要求合作方在其IdP为第三方移动应用发放的身份令牌中,携带你方需要的用户属性(用户唯一标识、角色、权限等)
运行时数据流步骤
- 用户在第三方移动应用中,通过合作方自有IdP完成登录,获取合作方IdP发放的身份令牌(OIDC ID Token/Access Token 或 SAML断言),全程第三方应用仅对接自身企业IdP,无任何Auth0相关逻辑
- 第三方应用需要访问你的NodeJS微服务时,向你方暴露的令牌交换接口(该接口使用你方自有域名,可通过反向代理隐藏后端Auth0的域名)发起请求,携带自身持有的合作方IdP身份令牌
- 你方的令牌交换服务首先校验传入的合作方IdP令牌合法性(校验签名、颁发者、有效期、受众等),验证通过后调用Auth0的
/oauth/token令牌交换接口,传入合法的合作方令牌以及用户属性 - Auth0基于预先配置的联邦身份规则,完成合作方用户身份到你方身份体系的映射(支持自动创建影子用户或仅做临时身份映射),按照配置为该用户生成对应的标准OAuth 2.0 Access Token,可在Token中自定义注入用户角色、权限等声明
- 令牌交换服务将Auth0返回的Access Token返回给第三方移动应用
- 第三方应用携带该Access Token请求你的NodeJS微服务,你的微服务按照常规的Auth0 Access Token校验逻辑完成身份校验、权限判断即可,和第一方应用的API校验逻辑完全一致
常见疑问解答
- SAML对接场景下Auth0支持生成标准OAuth Access Token:你之前查阅的SAML SP对接仅为身份联邦的配置步骤,当通过令牌交换触发身份联邦流程后,Auth0会自动生成符合OAuth规范的Access Token,无需额外开发
- 所谓中间应用就是上述的轻量令牌交换服务:该服务代码量极小,核心逻辑仅为令牌合法性校验、请求转发,你甚至可以直接通过反向代理直接暴露Auth0的令牌交换接口(替换为你方自有域名),配合Auth0的Action功能完成合作方令牌校验,不需要额外部署独立服务
- 用户粒度授权实现:你可以通过Auth0的Action、规则功能,在生成Access Token时,根据合作方传入的用户属性,自动为Token添加自定义的
roles、permissions声明,你的NodeJS微服务直接读取这些声明即可完成细粒度访问控制
内容的提问来源于stack exchange,提问作者bvnbhati
相关产品推荐
相关产品推荐

