iframe和api的OAuth 2身份验证

时间:2017-08-03 16:32:57

标签: authentication oauth oauth-2.0 google-oauth

我正在将多个网站/服务集成到我的应用程序中。我使用iframe(或vue Electron的webview)进行UI集成,我也使用API​​来实现这些服务之间的交叉通信。

目前,我必须为每项服务进行两次OAuth 2身份验证:一次作为iframe中自然身份验证的一部分,另一次当我要求用户授予我访问此服务的权限时(出于api原因)。

有没有办法简化这个过程?

2 个答案:

答案 0 :(得分:5)

最先进的回应是完全修改您的应用程序。

  • 您应该有1个SPA申请而不是iframe
  • 此应用程序将进行身份验证以获取OAuth2令牌
  • 然后,此应用程序将调用后端(访问多个后端,或访问调用后端的api管理层)。

事情就是这样,你可以有两个策略:

  • 在第一次认证时给予所有许可(范围)
  • 在第一次认证时给出较小的范围,然后在需要时#34;重新认证" (实际上验证新范围)以获得新的访问令牌

当API想要调用另一个API时,您还有3个策略:

  • 您只需使用API​​接收的API调用服务的相同客户端令牌(无需人工交互)
  • 您的API从服务帐户生成令牌(使用ROPC身份验证方案),(无需人工交互)。 (API将是第二个API的客户端)
  • 您的身份提供者有一个端点来转换访问令牌:您的API可以为客户端提供访问令牌,授权服务器将使用您的API的client_id对其进行转换。您将此令牌发送到2ndAPI(令牌将显示您的UI应用程序的主题,但客户端ID将是第一个API clientId)(无需人工交互)

现在,如果您在同一个域上使用带有多个子应用程序的IFrame(该域需要完全相同!),则可以通过本地存储共享相同的访问令牌。 (安全不是一流的) 您可能需要在某个时间使用更大的范围列表进行身份验证,但这是您唯一的选择。您将模拟单个页面应用程序,但问题是您可能具有可能不同的client_id,具体取决于您进行身份验证的第一个应用程序。

编辑:多个授权服务器

根据您的评论,您有多个授权服务器。一种策略可能是要求用户进行身份验证,然后您的应用程序可以获得access_token和refresh_token。 根据您的授权服务器,refresh_token可以在很长一段时间内被大量使用,因此,如果您将其存储在某个地方,则下次用户访问您的应用程序时,您的应用程序可以静默地从此刷新令牌获取access_token。然后,您的应用程序可以访问删除API,而无需用户进行更新的交互。 当然,这意味着您必须最安全地保存此令牌。

答案 1 :(得分:3)

通过使用OpenID Connect,您可以一步完成身份验证和授权,同时获取id_token以将您的用户登录到您的应用,并获得access_token以在单个身份验证响应中访问API