在为用户池进行签名时,是否有可能获得身份提供者oauth令牌的方法?我需要离线访问Google用户访问权限并刷新令牌。到目前为止,我已经尝试过:
我能够创建用户,但无法获得oauth访问和刷新令牌。看起来属性映射应该实现这一点,但在映射选择框中有no option for access/refresh tokens。
2)使用google javascript api登录并通过cognitoidentityserviceprovider.adminCreateUser
创建用户这个流程将是:
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
之外还有其他必需的查询参数,我不知道如何获取(状态?)。
答案 0 :(得分:2)
如果有人遇到相同问题,请点击这里
注意-如果操作不正确,则会向客户端公开敏感属性。
您需要创建两个版本的属性-custom
和dev: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',
},
....