Amazon Cognito - 使用 Amazon Connect 联合用户
Amazon Cognito - Federating Users with Amazon Connect
我们正在尝试使用 Amazon Cognito 的托管登录页面,最终目标是根据 Amazon Connect 实例对用户进行身份验证。我们有一个使用 amazon connect streams 库的网络应用程序,并希望在初始化之前让用户登录到 Connect。
目的是使用 Cognito 登录过程提供一组临时凭据,使我们能够调用 Connect API 的 getFederationToken 方法,并随后让用户登录到 Connect此调用提供的令牌。
设置的一些细节:
连接设置为使用 SAML 进行身份验证。
双方用户 have/use 用户名的电子邮件地址。
Cognito 用户池设置了应用程序客户端。应用程序客户端具有:these readable/writable attributes, these allowed flows/scopes,托管登录页面在完成后将用户定向到我们的 Web 应用程序,这是我们获取 Id 令牌的时间。
Cognito Identity Pool 的身份验证角色(我认为假定 post Cognito 身份验证流程)具有适当的信任关系和权限,允许它针对连接实例调用连接 GetFederationToken 方法。此池的身份验证提供程序设置为 cognito 用户池。
下面的一段代码(ids 已编辑)显示了我们目前正在尝试做的事情:
// Id token extracted from params
var IdToken = hashObj.id_token;
// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'eu-west-2';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'eu-west-2:00000000-0000-0000-0000-000000000000',
Logins: {
'cognito-idp.eu-west-2.amazonaws.com/eu-west-2_abcdefg': IdToken
}
});
var connect = new AWS.Connect();
var params = {
InstanceId: '00000000-0000-0000-0000-000000000000' /* required */
};
// Attempt to get a federation token from connect using the creds constructed above.
connect.getFederationToken(params, function (err, data) {
if (err) {
console.log(err);
} // an error occurred
else {
console.log(data);
}
});
问题是这样的:联合调用返回用户未找到结果。
基本上它无法将我们通过 Cognito 身份验证过程的用户与 Connect 中的用户匹配(我已经检查了用户名匹配的次数超过了我现在可以计算的次数)。
我们已经尝试过:
- 混淆身份池和用户池的属性。
- 将凭据对象中的 RoleSessionName 设置为各种内容。
- 使用令牌生成前 lambda 向 id 令牌添加声明。
关于我们缺少什么的任何想法?好像差了一小步
您将无法设置它。这是因为 Cognito 是 OIDC 身份提供者。 AWS Connect 需要的是 SAML 身份提供商。
我们正在尝试使用 Amazon Cognito 的托管登录页面,最终目标是根据 Amazon Connect 实例对用户进行身份验证。我们有一个使用 amazon connect streams 库的网络应用程序,并希望在初始化之前让用户登录到 Connect。
目的是使用 Cognito 登录过程提供一组临时凭据,使我们能够调用 Connect API 的 getFederationToken 方法,并随后让用户登录到 Connect此调用提供的令牌。
设置的一些细节:
连接设置为使用 SAML 进行身份验证。
双方用户 have/use 用户名的电子邮件地址。
Cognito 用户池设置了应用程序客户端。应用程序客户端具有:these readable/writable attributes, these allowed flows/scopes,托管登录页面在完成后将用户定向到我们的 Web 应用程序,这是我们获取 Id 令牌的时间。
Cognito Identity Pool 的身份验证角色(我认为假定 post Cognito 身份验证流程)具有适当的信任关系和权限,允许它针对连接实例调用连接 GetFederationToken 方法。此池的身份验证提供程序设置为 cognito 用户池。
下面的一段代码(ids 已编辑)显示了我们目前正在尝试做的事情:
// Id token extracted from params
var IdToken = hashObj.id_token;
// Initialize the Amazon Cognito credentials provider
AWS.config.region = 'eu-west-2';
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'eu-west-2:00000000-0000-0000-0000-000000000000',
Logins: {
'cognito-idp.eu-west-2.amazonaws.com/eu-west-2_abcdefg': IdToken
}
});
var connect = new AWS.Connect();
var params = {
InstanceId: '00000000-0000-0000-0000-000000000000' /* required */
};
// Attempt to get a federation token from connect using the creds constructed above.
connect.getFederationToken(params, function (err, data) {
if (err) {
console.log(err);
} // an error occurred
else {
console.log(data);
}
});
问题是这样的:联合调用返回用户未找到结果。
基本上它无法将我们通过 Cognito 身份验证过程的用户与 Connect 中的用户匹配(我已经检查了用户名匹配的次数超过了我现在可以计算的次数)。
我们已经尝试过:
- 混淆身份池和用户池的属性。
- 将凭据对象中的 RoleSessionName 设置为各种内容。
- 使用令牌生成前 lambda 向 id 令牌添加声明。
关于我们缺少什么的任何想法?好像差了一小步
您将无法设置它。这是因为 Cognito 是 OIDC 身份提供者。 AWS Connect 需要的是 SAML 身份提供商。