Web应用程序如何在AWS无服务器配置中刷新Google登录令牌?

时间:2017-08-19 19:42:28

标签: amazon-web-services amazon-cognito google-oauth2 serverless-framework

我有一个React + Redux应用程序,它与AWS Resources(例如DynamoDB)进行对话。要访问DynamoDB:

  1. Web App从Google,Facebook等获取access_token / id_token。
  2. Web App将Facebook / Google令牌交换为Cognito Federated Identities令牌。
  3. 使用联合身份验证令牌,Web App可以使用aws-sdk与DynamoDB和其他AWS资源进行通信。
  4. 问题是Facebook / Google令牌过期(1-2小时后)。然后我无法刷新我的联合身份令牌,我无法与AWS资源交谈。

    如何使用Javascript直接从Web App刷新Google令牌?

    Google建议 NOT 在Web应用程序中使用和存储刷新令牌,但将访问令牌(或ID令牌)发送到后端,后端在刷新令牌上进行交换。据此,我是否设置了额外的Lambda函数(用于交换访问令牌以刷新Google令牌)和DynamoDB中的表(我存储刷新令牌)?

    ...或...

    我可以强制接收刷新令牌到Web应用程序并存储在本地存储中吗?

1 个答案:

答案 0 :(得分:0)

将刷新令牌存储在本地存储中并不是一个好主意,因为用户可以在开发人员工具中查看本地存储,也可以在本地运行Javascript函数,从您的站点/ webapp上的本地存储中获取数据。

您可以为此设置lambda函数,并在HttpOnly cookie中存储刷新令牌。您可以从lambda函数设置响应头(nodejs示例):

response.setHeader('Set-Cookie', 'refresh_token="your_refresh_token"; HttpOnly');

此cookie将在客户端向lambda发出的每个请求中发送。

HttpOnly会向您保证无法通过javascript访问此Cookie。