oauth2.0 通过PING身份实现OpenID连接,通过authorization_endpoint自定义身份验证页面

nfg76nw0  于 2023-03-17  发布在  其他
关注(0)|答案(1)|浏览(117)

我们有我们的申请(App-A)由企业A构建,需要使用第三方IDP(Ping身份)来联合用户身份验证。除了允许用户通过Ping进行身份验证以登录我们的App-A之外,我们还需要允许由另一个Enterprise-B构建的App-B代表我们的用户访问有关他们的信息(离线访问),一旦我们的用户验证进入我们的系统,并提供所需的同意。显然,OpenID连接与授权代码流似乎是要走的路。
现在,当用户直接登录到我们的App-A时,以及当用户通过App-B并向App-B提供offline_access同意以便他们从App-A访问用户的信息时,“我们有一个要求”,即身份验证页面需要完全自定义并主题化为我们的App-A的产品主题/颜色。
App-B(Enterprise-B)还要求我们或我们的IDP托管一个“/.well-known/openid-configuration”端点,其中列出了authorization_endpoint、token_endpoint、userinfo_endpoint、scopes_supported(包括offline_access作用域)以及其他内容(如OIDC标准)。
现在我的问题是,当App-B将用户重定向到我们的App-A,并同意允许App-B从App-A访问他们的信息时,我知道App-B会将用户重定向到“/.well-known/openid-configuration”端点中的“authorization_endpoint”所指向的URL,以挑战用户进行身份验证。
a)我们的IDP(Ping身份)是否应该为我们构建自定义登录屏幕和同意屏幕,或者b)我们是否可以构建此自定义主题登录屏幕,在成功进行身份验证和同意后,可以从IDP向App-B返回authorization_code?
P.S:我们的前端(在App-A上)是一个Angular SPA,通过电容器封装,在Web、iOS和Android上运行。我们的后端(资源服务器)作为REST API提供,可以通过IDP对access_token进行JWT验证。

smdncfj3

smdncfj31#

在这里,我想从所有权的Angular 更清楚地说明角色:

组件角色(企业A)

企业A使用授权服务器(AS)来保护其数据:

  • 应用程序A向AS A运行代码流
  • 用户验证
  • AS A向App A颁发令牌
  • 应用A向其API发送访问令牌

然后,来自企业A的API可以正确地授权,因为所发布的令牌及其范围和声明由企业A控制。

组件角色(企业B)

这些应与企业A的相同,并应用于应用B及其API。

认证

授权服务器也具有IDP功能。以下是一些示例:

  • 企业A在其AS中为其用户提供自己的品牌和首选身份验证方法
  • 企业B在其AS中为其用户提供自己的品牌和首选身份验证方法
  • 来自应用程序A的登录可以通过AS B执行联合登录
  • 然后,AS B将向AS A发放令牌,之后,AS A继续向App A发放其自己的令牌

实现这一点的一种方法是将AS A配置为提示输入用户标识符(如电子邮件),然后它可以查找用户的企业,然后重定向到相应的IDP以验证用户。

答复

  • 应用程序B不会重定向到应用程序A。相反,企业B中的用户使用应用程序A,应用程序A重定向到AS A,AS A重定向到AS B。然后,这些用户以首选方式登录。
  • 在您的情况下,Ping标识为AS A。您将不会为企业B构建登录屏幕。相反,AS B在AS A中注册为IDP,AS A在AS B中注册为客户端。这使联合能够工作。

这听起来可能很复杂,但这是一个功能强大的行为,不需要任何代码。我总是建议从API需要的东西开始反向工作,因为OAuth主要是保护数据,而不是身份验证。

相关问题