在AWS cognito用户池

时间:2018-03-12 17:00:51

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

在为用户池进行签名时,是否有可能获得身份提供者oauth令牌的方法?我需要离线访问Google用户访问权限并刷新令牌。到目前为止,我已经尝试过:

1)使用amazon-cognito-auth-js

我能够创建用户,但无法获得oauth访问和刷新令牌。看起来属性映射应该实现这一点,但在映射选择框中有no option for access/refresh tokens

2)使用google javascript api登录并通过cognitoidentityserviceprovider.adminCreateUser

创建用户

这个流程将是:

  • 通过gapi登录并获取oauth authorization_code
  • authorization_code发送到HTTP lambda函数以交换访问和刷新令牌。
  • 使用adminCreateUser
  • 创建新的用户池用户
  • 将刷新/访问令牌添加到此用户。

虽然看起来似乎无法adminCreateUser身份提供者。只有用户名/密码。

3)使用gapi登录并对oauth2/idpresponse进行ajax调用

与上一次流程类似,我会:

  • 通过gapi登录并获取oauth authorization_code

  • authorization_code发送到HTTP lambda函数以交换访问权限并刷新令牌。

  • https:<domain>.auth.us-east-1.amazoncognito.com/oauth2/idpresponse?code=<authorization_code>发出GET请求,该请求似乎是注册新用户的amazon-cognito-auth-js库中的步骤。

  • 将刷新/访问令牌添加到此用户。

oauth2/idpresponse的GET请求总是失败。除authorization_code之外还有其他必需的查询参数,我不知道如何获取(状态?)。

1 个答案:

答案 0 :(得分:2)

如果有人遇到相同问题,请点击这里

注意-如果操作不正确,则会向客户端公开敏感属性。

您需要创建两个版本的属性-customdev:custom,将oidc提供程序属性映射到custom的属性(看起来像dev:custom不可映射),然后在TokenGeneration_HostedAuth触发器中,您需要获取以下custom个属性,设置dev:custom个,然后删除custom个。

似乎有点调整,但是我看不到另一种方法来确保令牌安全。

解决方案是在用户池中创建自定义属性,然后将这些属性映射为身份提供者。看起来像:

'custom:refresh_token': refresh_token
'custom:id_token': id_token
'custom:access_token': access_token

Cloudformation模板:

用户池

....
Schema: [
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'refresh_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'access_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        DeveloperOnlyAttribute: true,
        Mutable: true,
        Name: 'id_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'refresh_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'access_token',
        Required: false,
    },
    {
        AttributeDataType: 'String',
        Mutable: true,
        Name: 'id_token',
        Required: false,
    },
],
....

用户池身份提供者

....
AttributeMapping: {
    'custom:refresh_token': 'refresh_token',
    'custom:access_token': 'access_token',
    'custom:id_token': 'id_token',
},
....