访问密钥以替换AWS的身份验证

时间:2018-07-19 08:32:54

标签: amazon-web-services authentication amazon-cognito

我们正在AWS中开发一个Web应用程序,将其用户存储在Cognito中。为此,我们需要与现有的桌面应用程序集成,客户端的管理员可以在其中为网站创建只读用户,以获取从桌面应用程序发送的数据。

由于此只读用户要求,因此必须有一个与桌面应用程序安装的每个实例的身份验证关联的用户。没问题,因为我们很高兴桌面应用程序的所有本地用户都将其数据记录到Web应用程序中的同一位置。棘手的是,我们无法将用户名和密码作为桌面应用程序最终用户的常识。

已建议我们可以使用基于令牌的访问权限,以允许桌面应用程序访问我们的API,但是这些操作都是受时间限制的,因此我们无法让用户每天重新进行身份验证。但是,另一个建议是创建我们自己的“密钥”,其中包含Cognito用户的用户名和密码,以便应用程序能够使用它,例如使用用户可用的解密密钥对用户名和密码进行加密。桌面应用程序,以便它可以作为该用户本身进行身份验证,而最终用户无法访问帐户详细信息。

我想知道目前是否有最佳实践来处理这样的需求,而这种需求要比我们现有的要好。

总结:

  • 我们有一个具有Cognito身份验证的AWS API
  • 我们有一个桌面应用程序,需要访问API
  • 我们无法让用户知道用于访问API的帐户的详细信息
  • 我们需要一种提供密钥的方法,该密钥将允许桌面应用程序针对API进行身份验证,从而无需随着时间的推移刷新令牌。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

不幸的是,此要求:

“我们需要一种提供密钥的方法,该密钥将允许桌面应用程序针对API进行身份验证,从而无需随着时间的推移刷新令牌。”

使用Cognito不可能。假设您正在使用Cognito用户池,那么在身份验证中获得的ID和访问令牌仅在1个小时内有效,然后必须使用刷新令牌对其进行刷新。可以将刷新令牌配置为在很长一段时间(甚至数年)内有效,因此您可以设置以下流程:

  • 该应用一次对Cognito进行身份验证
  • 获取有效期很长的刷新令牌
  • 丢弃原始的加密用户名/密码
  • 每小时使用刷新令牌获取一个新的ID /访问令牌

尽管如此,您必须将刷新令牌存储在客户端的某个位置。并且可能具有一种支持机制,该机制可以在刷新令牌丢失的情况下在客户端上重新启动此过程。

如果您正在使用Cognito用户池,则将必须进行令牌刷新。如果您使用的是Cognito身份池,则也是如此-身份池提供的AWS凭证仅有效1个小时,然后必须刷新它们。