我对Cognito和API Gateway的集成有疑问,希望您能帮助我。我正在考虑制作一个应用程序,我希望与第三方(Facebook,Twitter ...)进行身份验证过程,因此我放弃了Cognito用户池,然后我有Cognito Identity Pool,但这是我怀疑的地方。< / p>
感谢您的帮助
答案 0 :(得分:2)
如何将其与API网关集成?
我应该使用API网关自定义授权程序来管理Cognito生成的令牌吗?
如果我不使用自定义授权程序,如何根据用户配置文件(管理员,客户端...)限制对API方法的访问?
答案 1 :(得分:0)
如果授权者设置为AWS_IAM,则可以使用aws-sdk生成对API网关的签名请求。首先获得一些临时凭据,然后创建一个签名的请求。
获取凭据(例如javascript sdk的示例):
var AWS = require('aws-sdk')
var cognitoidentity = new AWS.CognitoIdentity();
var makeSignedRequest = async function () {
var params = {
IdentityId: 'STRING_VALUE', /* required */
CustomRoleArn: 'STRING_VALUE',
Logins: {
'<IdentityProviderName>': 'STRING_VALUE',
/* '<IdentityProviderName>': ... */
}
};
var credsForIdentity = await cognitoidentity.getCredentialsForIdentity(params).promise()
var httpRequest = new AWS.HttpRequest("https://<API_GATE_WAY_ENDPOINT", "<region>");
httpRequest.headers.host = "<API_GATE_WAY_ENDPOINT>"; // Do not specify http or https!!
AWS.config.credentials = {
accessKeyId: creds.Credentials.AccessKeyId,
secretAccessKey: creds.Credentials.SecretKey,
sessionToken: creds.Credentials.SessionToken
}
httpRequest.method = "POST";
httpRequest.body = JSON.stringify(data)
var v4signer = new AWS.Signers.V4(httpRequest, "execute-api");
v4signer.addAuthorization(AWS.config.credentials, AWS.util.date.getDate());
const rawResponse = await fetch(httpRequest.endpoint.href , {
method: httpRequest.method,
headers: httpRequest.headers,
body: httpRequest.body
});
}
这个示例并不完美,但是它是AWS中签名请求的一个很好的起点。
当然,不要忘记为您的身份验证提供适当的权限,以便它们可以调用API。