Authentication 链接OpenID令牌

Authentication 链接OpenID令牌,authentication,openid,Authentication,Openid,我在microservices环境中工作,其中每个服务都使用OpenID连接到身份验证服务(本地IdP)进行身份验证,该身份验证基于我在本地数据库中保留的用户 现在,我希望这些服务能够使用Azure、Google等进行身份验证 我是否可以(也应该)修改我的身份验证服务以允许重定向到另一个IdP,并将令牌替换或链接到我服务的专有令牌? 有没有更简单的方法 如何允许用户使用名称/密码或外部IdP登录?如果您管理所有SP(您的微服务),那么在您的通用IdP上实现它肯定会更容易 但是,如果SP是外部的(

我在microservices环境中工作,其中每个服务都使用
OpenID连接到身份验证服务(本地IdP)进行身份验证,该身份验证基于我在本地数据库中保留的用户

现在,我希望这些服务能够使用
Azure
Google
等进行身份验证

我是否可以(也应该)修改我的身份验证服务以允许重定向到另一个
IdP
,并将令牌替换或链接到我服务的专有令牌? 有没有更简单的方法

如何允许用户使用名称/密码或外部IdP登录?

如果您管理所有SP(您的微服务),那么在您的通用IdP上实现它肯定会更容易

但是,如果SP是外部的(如您刚刚安装的现有服务),并且它们已经实现了您想要使用的公共IDP,那么要顺利通过您当前的IDP就有点困难了


我猜您是在第一种情况下(您制作了所有SP),因此我将详细说明:

当您当前的IDP将在其他公共IDP上对用户进行身份验证时,它将获得一些信息(电子邮件、姓名等),您可以在回答中对这些信息进行规范化,以确保您的SP完全不知道使用了哪个原始IDP。如果将来能够调试此设置,对您来说会更好。当然要增加一个新的公共IDP

但是,如果您需要使用对原始IDP的特定调用(比如说Youtube API),您可以在您的通用IDP上使用一个不可知API,该API将转发给原始IDP的相应专有API,或者在IDP没有视频系统的情况下拒绝请求


或者,您可以在oidc令牌的自定义字段或范围内,将原始令牌提供给SP,因此,例如,专用于视频的SP可以使用google用户令牌直接调用Youtube API。

我自己也在做一些关于此主题的研究,从目前为止的发现来看,似乎有一个urn:ietf:params:oauth:grant-type:token-exchange-grant-type应该允许将外部idp令牌交换到内部idp令牌,如中所述

它应该作为openid connect/token端点的一部分得到支持,所以只要本地idp支持它,我想这应该是实现您想要的目标的最佳实践

我目前正在研究作为本地idp的idp实现,我的一些要求是允许与第三方进行SSO,同时能够从外部用户身份颁发本地令牌


将随时间更新…

我最近为我的公司做了类似的设置。我想分享一下整体结构,对我们的解决方案提出一个想法。希望有帮助:

我们的身份验证服务器是具有以下属性的服务器:

  • 托管静态登录屏幕,允许通过电子邮件+密码对本地数据库进行身份验证,并提供与外部OAuth2提供商进行身份验证的链接
  • 本地和外部身份验证请求都转发到
  • 成功登录后,本地和外部Passport.js策略都会响应回调。响应后,通过创建会话对象并发送cookie
  • 此时,Cookie可用于交换JWT,因此可以使用承载访问令牌对无状态API进行身份验证