我正在将多个网站/服务集成到我的应用程序中。我使用iframe(或vue Electron的webview)进行UI集成,我也使用API来实现这些服务之间的交叉通信。
目前,我必须为每项服务进行两次OAuth 2身份验证:一次作为iframe中自然身份验证的一部分,另一次当我要求用户授予我访问此服务的权限时(出于api原因)。
有没有办法简化这个过程?
答案 0 :(得分:5)
最先进的回应是完全修改您的应用程序。
事情就是这样,你可以有两个策略:
当API想要调用另一个API时,您还有3个策略:
现在,如果您在同一个域上使用带有多个子应用程序的IFrame(该域需要完全相同!),则可以通过本地存储共享相同的访问令牌。 (安全不是一流的) 您可能需要在某个时间使用更大的范围列表进行身份验证,但这是您唯一的选择。您将模拟单个页面应用程序,但问题是您可能具有可能不同的client_id,具体取决于您进行身份验证的第一个应用程序。
编辑:多个授权服务器
根据您的评论,您有多个授权服务器。一种策略可能是要求用户进行身份验证,然后您的应用程序可以获得access_token和refresh_token。 根据您的授权服务器,refresh_token可以在很长一段时间内被大量使用,因此,如果您将其存储在某个地方,则下次用户访问您的应用程序时,您的应用程序可以静默地从此刷新令牌获取access_token。然后,您的应用程序可以访问删除API,而无需用户进行更新的交互。 当然,这意味着您必须最安全地保存此令牌。
答案 1 :(得分:3)
通过使用OpenID Connect,您可以一步完成身份验证和授权,同时获取id_token
以将您的用户登录到您的应用,并获得access_token
以在单个身份验证响应中访问API