要将 AWS 与外部应用程序连接起来,Cognito 将是一个很好的解决方案。它将允许您使用 AWS 节点开发工具包和后端中的密钥生成 OpenID 令牌,然后您可以将其与 AWS JavaScript 开发工具包和WebIdentityCredentials
客户端一起使用。
请注意,我不熟悉您的特定插件/工具,但这至少可以让您获得 OpenID,并且在我的工作中它确实让我使用 连接WebIdentityCredentials
,我想这是他们正在使用的。
- 在 AWS 上配置 Cognito
Cognito 上的设置相当简单——它或多或少是一个演练。不过,它确实涉及在 AWS 上配置 IAM 规则。如何设置这个是非常具体的项目,所以我想我需要向你指出官方资源。他们最近做了一些不错的更新,但我承认我没有跟上所有的变化。
通过配置,您将需要设置“开发人员身份验证身份”,记下“身份池 ID”以及 Cognito 设置的 IAM 角色 ARN。
- 设置一个可以处理传入路由的节点服务器
有很多关于如何完成此操作的材料,但您要确保包含和配置AWS 开发工具包。我还建议使用body-parser,因为它会让你的 POST 请求更容易阅读。
var app = express();
var bodyParser = require('body-parser');
var AWS = require('aws-sdk');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
- 创建 POST 函数以与 Cognito 对话
设置好服务器后,您可以使用getOpenIdTokenForDeveloperIdentity 联系Cognito 。在我的设置中,我使用经过身份验证的用户,因为我希望他们回来并希望能够继续关联,所以这就是为什么我在req.body.UserIDFromAngularApp
.
这是我使用的功能express.router()
。
.post(function(req, res) {
if(req.body.UserIDFromAngularApp) {
var cognitoidentity = new AWS.CognitoIdentity();
var params = {
IdentityPoolId: 'your_cognito_identity_pool_id',
Logins: {
'your_developer_authenticated_identity_name': req.body.UserIDFromAngularApp
}
};
cognitoidentity.getOpenIdTokenForDeveloperIdentity(params, function(err, data) {
if (err) { console.log(err, err.stack); res.json({failure: 'Connection failure'}); }
else {
console.log(data); // so you can see your result server side
res.json(data); // send it back
}
});
}
else { res.json({failure: 'Connection failure'}); }
});
如果一切顺利,它将返回一个 OpenID 令牌给您。然后,您可以将其返回给您的 Angular 应用程序。
- 来自 Angular 的 POST,从 Promise 收集
至少你需要发布到你的新节点服务器,然后从 Promise 中收集 OpenID 令牌。使用此模式,将在data.Token
.
听起来您可能只需要将该令牌传递给您的插件/工具。
如果您需要进一步处理身份验证,我已经包含了处理WebIdentityCredentials
.
angular.module('yourApp').factory('AWSmaker', ['$http', function($http) {
return {
reachCognito: function(authData) {
$http.post('http://localhost:8888/simpleapi/aws', {
'UserIDFromAngularApp': authData.uid,
})
.success(function(data, status, headers, config) {
if(!data.failure) {
var params = {
RoleArn: your_role_arn_setup_by_cognito,
WebIdentityToken: data.Token
};
AWS.config.credentials = new AWS.WebIdentityCredentials(params, function(err) {
console.log(err, err.stack);
});
}
});
}
}]);
这应该让你上路。让我知道我是否可以提供进一步的帮助。