Oauth 2.0 oidc中多个提供程序的相同重定向uri

Oauth 2.0 oidc中多个提供程序的相同重定向uri,oauth-2.0,openid-connect,Oauth 2.0,Openid Connect,我希望我的依赖方应用程序(RP)能够与任何oidc提供商连接。 这意味着用户将能够设置任何支持openid connect的身份提供程序 因此,我希望我的RP应用程序有一个重定向uri,例如 因此,所有IDP将在身份验证代码流中调用相同的IDP RP如何区分每个IDP?知道要调用哪个IDP来完成oauth流吗?您可以使用auth请求的参数: state不透明值,用于维护请求和回调之间的状态 状态值将包含随机部分和身份验证私有标识符。例如“google-A41DsGDm”。身份验证提供程序应该返

我希望我的依赖方应用程序(RP)能够与任何oidc提供商连接。 这意味着用户将能够设置任何支持openid connect的身份提供程序

因此,我希望我的RP应用程序有一个重定向uri,例如

因此,所有IDP将在身份验证代码流中调用相同的IDP

RP如何区分每个IDP?知道要调用哪个IDP来完成oauth流吗?

您可以使用auth请求的参数:

state
不透明值,用于维护请求和回调之间的状态

状态值将包含随机部分和身份验证私有标识符。例如“google-A41DsGDm”。身份验证提供程序应该返回与包含身份验证代码的重定向URL相同的状态值。因此,您的
/auth/callback
处理程序将知道要调用哪个身份验证提供程序的
/token
端点来获取令牌(在验证状态值的随机部分之后)


为完整起见,如果您只想使用单个后端处理程序,则可以将以
/auth/callback
开头的所有URI映射到该处理程序,并接受以下路径参数作为身份验证提供程序标识符。例如
/auth/callback/google?code=…

您应该知道一个建议,即可以使用不同的重定向URI来缓解IDP混合攻击:谁决定IDP名称?如果我有一个预定义的列表,那么它并不是任何idp的通用方法。如果用户决定了idp的名称,那么我将不得不以某种方式将该名称与特定的idp相关联。一个用户可能写
google
,另一个用户写
google
,但我需要知道他们都是指谷歌。也许我需要为idp生成一个随机标识符,并将其映射到一个特定的idp。例如,
ukjsd3hb
将被映射到谷歌,我将查询数据库以查找映射,并将
/auth/callback/ukjsd3hb?code=…
作为句柄。我的意思是,当用户第一次在我的应用程序中设置auth服务器时,会给他们一个随机标识符,他们必须在auth服务器设置中输入该标识符。我知道映射(db查找)生成标识符和防止重复的方式取决于您。它不需要是人类可读的。但如果在应用程序中生成,用户必须首先生成标识符,然后在身份验证提供程序中设置客户端的重定向URI。我可以问一下应用程序如何知道要使用哪个提供程序吗?看起来像鸡和蛋。用户指定提供程序,但用户未经过身份验证。我自己也试着做类似的事情,然后兜圈子。希望所有用户都能通过相同的URL访问,但我所能想到的是每个用户都有单独的URL。。。谢谢