AWS cognito:访问权限和身份令牌之间的区别是什么?

时间:2018-01-31 13:58:59

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

只是阅读docs,它们看起来与我非常相似,所以我无法辨别为什么要使用其中一个。虽然身份令牌似乎更好,因为它在用户池中具有自定义属性(例如:custom:blah以及默认值nameemail)。

现在,我正在使用一个将访问令牌传递回浏览器的应用程序,以便它可以使用它来进行ajax REST调用(有一个auth过滤器需要此访问令牌并验证它)。我可以用id令牌切换访问令牌吗?当前的验证逻辑是从访问令牌中获取sub字段(uuid),但此sub字段也存在于身份令牌中(以及除{之外的几乎所有其他属性) {1}}我不需要)。我只是想确保我理解这一点,因为令我困惑的是为什么两个令牌都存在并且看起来如此相似。

2 个答案:

答案 0 :(得分:10)

id_token是供您的应用程序处理的,因此您可以获取用户的所有个人详细信息,例如他们的姓名,年龄,电子邮件地址等。一般来说,您不应该将此令牌发送到其他任何地方,因为它包含敏感的用户数据。

access_token用于呼叫其他'外部'服务(以及外部我包括其他AWS服务 - 这些服务通常通过http调用)。它为您的用户提供服务访问授权,而无需包含他们的个人详细信息。

从表面上看,这看起来有点令人困惑,因为您实际上可以使用id_token以与access_token相同的方式访问服务。但是,良好的做法是在这种情况下使用access_token,如果后端服务需要用户数据,他们应该在Cognito中自行查找。

答案 1 :(得分:0)

从文档中对我来说区别不明显的事情:
如果您正在使用 pretoken 触发器函数并希望使用 claimsToAddOrOverride 向声明添加其他信息,则需要使用 id 令牌,因为访问令牌中不存在此信息。 例如:

event.response = {
  claimsOverrideDetails: {
    claimsToAddOrOverride: {
      'userProfileID': id,
    }
  },
}

我希望它在 AppSync 解析器中使用 lambda 函数作为源