我陷入了"Amazon Cognito Identity用户池"流程.
我尝试了所有可能的代码来验证cognito用户池中的用户.但我总是得到错误说"错误:无法验证客户端4b*******fd的秘密哈希".
这是代码:
AWS.config.region = 'us-east-1'; // Region
AWS.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:b64bb629-ec73-4569-91eb-0d950f854f4f'
});
AWSCognito.config.region = 'us-east-1';
AWSCognito.config.credentials = new AWS.CognitoIdentityCredentials({
IdentityPoolId: 'us-east-1:b6b629-er73-9969-91eb-0dfffff445d'
});
AWSCognito.config.update({accessKeyId: 'AKIAJNYLRONAKTKBXGMWA', secretAccessKey: 'PITHVAS5/UBADLU/dHITesd7ilsBCm'})
var poolData = {
UserPoolId : 'us-east-1_l2arPB10',
ClientId : '4bmsrr65ah3oas5d4sd54st11k'
};
var userPool = new AWSCognito.CognitoIdentityServiceProvider.CognitoUserPool(poolData);
var userData = {
Username : 'ronakpatel@gmail.com',
Pool : userPool
};
var cognitoUser = new AWSCognito.CognitoIdentityServiceProvider.CognitoUser(userData);
cognitoUser.confirmRegistration('123456', true,function(err, result) {
if (err) {
alert(err);
return;
}
console.log('call result: ' + result);
});
Run Code Online (Sandbox Code Playgroud) 使用AWS Cognito,我想创建虚拟用户以进行测试.
然后,我使用AWS控制台创建此类用户,但用户的状态设置为FORCE_CHANGE_PASSWORD.使用该值,无法对此用户进行身份验证.
有没有办法改变这种状态?
UPDATE从CLI创建用户时的相同行为
我正在构建一个由Angular2单页面应用程序和在ECS上运行的REST API组成的系统.API在.Net/Nancy上运行,但这可能会发生变化.
我想尝试一下Cognito,这就是我想象的身份验证工作流程:
我的问题是关于第3步.我的服务器(或者更确切地说:我的无状态,自动扩展,负载平衡的Docker容器)如何验证令牌是否可信?由于"服务器"还没有出台的智威汤逊本身,它不能使用自己的秘密(如在基本JWT例如描述这里).
我已经阅读了Cognito文档并搜索过很多内容,但是我找不到任何关于如何在服务器端使用JWT的好指南.
如何在Web应用程序(而非IOS或Android应用程序)中使用AWS-Cognito进行用户身份验证?
亚马逊认知刚出来:
http://aws.amazon.com/cognito/
http://aws.amazon.com/about-aws/whats-new/2014/07/10/introducing-amazon-cognito/
来自FAQ:
问:我是否仍需要自己的后端身份验证和身份系统与Amazon Cognito?
不可以.亚马逊Cognito支持通过亚马逊,Facebook和谷歌登录,以及为未经身份验证的用户提供支持.使用Amazon Cognito,您可以支持联合身份验证,配置文件数据同步存储和AWS访问令牌分发,而无需编写任何后端代码.
它似乎是建立在移动应用程序的基础上(他们为Android和IOS提供SDK).
到目前为止,AWS php SDK和boto都没有引用Cognito,但亚马逊提到了我们可以触及的"后端API".
我创建了一个api密钥并将其添加到我的函数中.我已经部署了api并测试了它但仍然得到:
"message": "Forbidden"
Run Code Online (Sandbox Code Playgroud)
如何将密钥传递给我的JSON请求,因为我一直在使用"x-api-key":"theKey"?
amazon-web-services amazon-cognito aws-lambda aws-api-gateway
我正在使用Cognito用户池来验证系统中的用户.成功的身份验证提供ID令牌(JWT),访问令牌(JWT)和刷新令牌.这里的文档http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html明确提到刷新令牌可以是用于刷新访问令牌,但没有提到如何.我的问题是,一旦我的访问令牌过期,我如何使用存储的刷新令牌再次刷新我的访问令牌?
我搜索了javascript sdk,找不到任何方法来做同样的事情.我绝对错过了什么.
此外,我通过Lambda函数考虑这一点,该函数接收访问令牌并刷新令牌并使用刷新的访问令牌进行响应.如果有人能对此有所启发,那将会很棒.
谢谢
我们正在使用API Gateway和Lambda在AWS上构建移动和Web应用程序,目前正在评估我们是否应该使用所有AWS Mobile Servcies(Cognito,Analytics,Mobile Hub等),或者我们是否应该使用Firebase(这提供了一些优势)喜欢远程配置).
我认为使用像Google Analytics,远程配置,崩溃报告,通知这样的firebase的非功能部分应该可以使用AWS后端.部分我不确定是身份验证层.
AWS Cognito可以很好地集成到API Gateway和Lamdba中,例如,只有经过身份验证的用户才能执行某些API调用.
如果我们使用Firebase身份验证,可以达到相同的行为吗?这有什么好的或坏的经历?
google-analytics amazon-web-services firebase amazon-cognito firebase-authentication
我是新的Cognito.我正在尝试使用Lambda实现AWS Cognito.这是我关注的教程.
AmazonCognitoIdentityClient client =
new AmazonCognitoIdentityClient();
GetOpenIdTokenForDeveloperIdentityRequest tokenRequest = new GetOpenIdTokenForDeveloperIdentityRequest();
tokenRequest.setIdentityPoolId("us-east-1_XXXXXXX");
Run Code Online (Sandbox Code Playgroud)
这是我在setIdentityPoolId中使用的池ID
这是JUnit测试
public class AuthenticateUser implements RequestHandler<Object, Object> {
@Override
public Object handleRequest(Object input, Context context) {
AuthenticateUserResponse authenticateUserResponse = new AuthenticateUserResponse();
@SuppressWarnings("unchecked")
LinkedHashMap inputHashMap = (LinkedHashMap)input;
User user = authenticateUser(inputHashMap);
return null;
}
public User authenticateUser(LinkedHashMap input){
User user = null;
String userName = (String) input.get("userName");
String passwordHash = (String) input.get("passwordHash");
try {
AmazonDynamoDBClient client = new AmazonDynamoDBClient();
client.setRegion(Region.getRegion(Regions.US_EAST_1));
DynamoDBMapper mapper = new DynamoDBMapper(client); …Run Code Online (Sandbox Code Playgroud) 好吧,我现在已经进入了这个阶段并取得了重大进展,但仍然完全被基本面所困扰.
我的应用程序使用Cognito用户池来创建和管理用户 - 这些在S3上通过IdentityId标识.我的每个用户都有自己的S3文件夹,AWS会自动为他们提供一个等于用户IdentityId的文件夹名称.
我需要将IdentityId与其他Cognito用户信息相关联,但无法确定如何使用.
我需要的关键是能够识别用户名以及给定IdentityId的其他cognito用户属性 - 而且这非常困难.
因此,第一场战斗是在Cognito用户通过AWS API Gateway发出请求时,弄清楚如何获取IdentityId.最后我得到了解决方案,现在我有一个Cognito用户,他向API网关发出请求,而我后面的Lambda函数现在有了IdentityId.那一点有效.
但我完全不知道如何访问存储在用户池中的Cognito用户信息.我找不到任何明确的信息,当然也没有代码,它显示了如何使用IdentityId来获取Cognito用户的属性,用户名等.
看来,如果我使用"Cognito用户池"在API网关中授权我的方法,那么可以使用正文映射模板将Cognito用户信息(例如sub,用户名和电子邮件地址)放入上下文中,但我可以没有得到IdentityId.
但是如果我AWS_IAM在API网关中使用授权我的方法,那么身体映射模板会反过来 - 它为我提供了IdentityId而不是Cognito用户字段,例如sub和username以及email.
这让我发疯了 - 如何将IdentityId和所有Cognito用户字段和属性合并为一个数据结构?事实上,我似乎只能得到一个或另一个是没有意义的.
我正在使用适用于AWS Cognito的JavaScript SDK,并且有一些我似乎无法保存的自定义属性,无法查看原因.
问题属性是可变字符串字段,如下所示:
custom: role
custom: recruitingrole
custom: title
Run Code Online (Sandbox Code Playgroud)
同一请求中的其他自定义字段似乎更新确定.具体来说,这些似乎工作:
custom:division
custom:linkedin
custom:location
custom:bio
Run Code Online (Sandbox Code Playgroud)
当我通过SDK提交时,会返回:
{"__ type":"NotAuthorizedException","message":"客户端试图写未经授权的属性"}
以下是发送的数据,如Chrome开发人员控制台网络输出中所示:
{
"AccessToken": "",
"UserAttributes": [{
"Name": "name",
"Value": "Steve Austin"
}, {
"Name": "custom:company",
"Value": "OSI"
}, {
"Name": "custom:division",
"Value": "Bionics"
}, {
"Name": "custom:recruitingrole",
"Value": "other"
}, {
"Name": "custom:linkedin",
"Value": "http://www.linkedin.com"
}, {
"Name": "custom:location",
"Value": "Mexico City, Mexico City, Mexico"
}, {
"Name": "custom:bio",
"Value": "A man barely alive."
}]
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议我为什么不能保存这些属性?
谢谢
amazon-cognito ×10
aws-lambda ×3
amazon-ec2 ×1
amazon-ecs ×1
aws-cli ×1
firebase ×1
javascript ×1
jwt ×1