我很难在浏览器脚本中获得凭据。
身份验证服务器返回cognito_identityId和cognito_token。
然后我设了一个琦琦
我试图在浏览器上以4种方式获取凭据,但都失败了:
PolicyDocument
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:xxxxxxxxxxxxx"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}问题:
谢谢。
谢谢你的好意。
我提出了你的建议,但没有改变。
错误信息。
POST https://cognito-identity.us-east-1.amazonaws.com/ 400 (Bad Request)
POST https://cognito-identity.us-east-1.amazonaws.com/ 400 (Bad Request)
Error: Missing required key 'IdentityId' in params
at fail (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2163:37)
at validateStructure (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2084:14)
at validateMember (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2110:21)
at validate (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:2059:10)
at Request.VALIDATE_PARAMETERS (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:800:32)
at Request.callListeners (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:3913:20)
at callNextListener (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:3903:12)
at chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:787:9
at finish (chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:126:7)
at chrome-extension://hmjdjbikinkmjbilihjibcihbkbjdgjf/bower_components/aws-sdk-js/dist/aws-sdk.js:142:9链接下面有源代码。
https://github.com/bisque33/my-custom-dictionary
服务器端是AWS Lambda函数。
var aws = require('aws-sdk');
aws.config.region = 'us-east-1';
var cognitoidentity = new aws.CognitoIdentity();
var identityPoolId = 'us-east-1:0dccff0d-5fd7-4d14-b38f-d27204feaecc';
console.log('Loading function');
exports.handler = function(event, context) {
console.log('token: %s', event.token);
var params = {
IdentityPoolId: identityPoolId,
Logins: {
'oauth.io': event.token
}
};
cognitoidentity.getOpenIdTokenForDeveloperIdentity(params,function(err,data){
if(err){
console.log(err);
context.fail('Something went wrong');
}else{
context.succeed(data);
}
});
};这个程序是谷歌-Chrome-扩展。
我用错了吗?
补充资料的更新
感谢您提供的额外信息。
background.js上104行出现错误
AWS.config.credentials.get(function(){和background.js上的115行
dataset.synchronize(而且,我的解释还不够。Facebook身份验证需要域(例如。http :// example.com)然而,没有域名.它有一个域‘chrome扩展名://xxxxxxxxxxxxxxxxxxxx’。然后,我使用https://oauth.io。它代理任何身份验证并接受铬扩展域。
Popup.js通过oauth.io sdk进行oauth.io身份验证。它得到一个facebook令牌,并给getOpenIdTokenForDeveloperIdentity。我认为facebook token.substr(0,14)是独一无二的。但是,如果它是错误的,我使用另一个唯一标识符(Ex)。(电邮地址)
对不起,我错了。AWS.config.credentials.get提供了一个错误:
Error: Invalid login token.而且,dataset.synchronize显示了这个错误:
Error: Missing required key 'IdentityId' in params发布于 2015-08-14 19:55:24
使用CognitoIdentityCredentials的第一种方法很可能是最好的方法。我不能准确地指出是什么导致了错误,但是让我们尝试几件事情:
'cognito-identity.amazonaws.com'并确保值是从后端对getOpenIdTokenForDeveloperIdentity的调用返回的令牌。如果继续使用CognitoIdentityCredentials方法有问题,请在这里答复更多信息,例如在收到错误消息时调用的确切方法/代码,以及跟踪的输出(即使用console.log('%o',.))在调用CognitoIdentityCredentials构造函数之前输入params。
根据所提供的补充资料更新
我仍然需要知道您收到错误的确切代码行,但根据提供的信息,我认为我仍然可以帮助.
根据我在background.js中看到的情况,您似乎正在尝试使用开发人员身份验证提供者来初始化CognitoIdentityCredentials。这就是我猜你收到错误的地方。
然而,在Popup.js中,您似乎试图使用Facebook对用户进行身份验证。如果您正在使用Facebook对用户进行身份验证,则应该将facebook访问令牌传递到您的登录地图中。只需使用graph.facebook.com作为登录地图和Facebook访问令牌中的密钥。关于如何做到这一点的更多细节,请参见Facebook Integration topic of the Amazon Cognito developer guide。
Facebook与开发人员的身份验证
我们可以让开发人员通过身份验证的身份为您工作,但在这种情况下,它看起来不适合您,因为您实际上并没有对Lambda函数中的标识进行任何额外的身份验证,而传递到getOpenIdTokenForDeveloperIdentity操作中的唯一用户标识符似乎是facebook令牌,顺便说一句,这并不好,因为令牌本身在用户会话之间甚至对同一个用户也会发生变化。通常,一个好的唯一标识符是电子邮件地址或内部系统使用的用户id。
Facebook登录和重定向
既然你最终想要使用Facebook登录,而Amazon拥有built-in integration for Facebook,那么最好的方法就是从Facebook获得一个访问令牌,并将Facebook令牌直接传递到科尼图的登录地图上。我不确定这是否适用于Auth.io (我只是不熟悉它),但只要Auth.io给您的JavaScript代码一个真正的facebook令牌,并且您将相同的Facebook应用ID添加到Auth.io和Amazon的控制台中,它就应该能工作。但是,您提到您希望使用Auth.io来避免Facebook重定向到登陆页面。我可能弄错了,但我很确定如果您使用的是Facebook's JavaScript SDK,您将不需要重定向页面。只有在执行Facebook's Manually Build a Login Flow时才需要重定向页面。
https://stackoverflow.com/questions/31976873
复制相似问题