使用 Cognito 通过 AWS Api Gateway 安全性创建新用户 - 如何在创建用户之前允许访问该用户?
Create a new user trough AWS ApiGateway secured with Cognito - how to allow access to the users before it is created?
我在使用 AWS-Cognito 保护的 AWS API 网关中有一个 API。为了使用端点,用户必须被 Cognito 识别,这将 return 一个令牌。
这里的问题与CREATE USER过程有关。为了使用此端点,用户必须存在于 Cognito 中,然后接收令牌并使用它连接到 CREATE USER 端点。但在数据库(api-端点)中创建用户时,该用户未在 Cognito 中创建,并且无权访问 API.
那么,这个过程的最佳方法应该是什么?
您不需要一直使用TOKEN 授权方。 API 网关允许您配置另一种类型的授权方:REQUEST。
在这种情况下,您完全取决于您如何判断某人是否有权(或未被授权)呼叫您的 API 端点。
event
看起来像这样(取自 AWS 文档):
{
"type": "REQUEST",
"methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
"resource": "/request",
"path": "/request",
"httpMethod": "GET",
"headers": {
"X-AMZ-Date": "20170718T062915Z",
"Accept": "*/*",
"HeaderAuth1": "headerValue1",
"CloudFront-Viewer-Country": "US",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Is-Mobile-Viewer": "false",
"User-Agent": "..."
},
"queryStringParameters": {
"QueryString1": "queryValue1"
},
"pathParameters": {},
"stageVariables": {
"StageVar1": "stageValue1"
},
"requestContext": {
"path": "/request",
"accountId": "123456789012",
"resourceId": "05c7jb",
"stage": "test",
"requestId": "...",
"identity": {
"apiKey": "...",
"sourceIp": "...",
"clientCert": {
"clientCertPem": "CERT_CONTENT",
"subjectDN": "www.example.com",
"issuerDN": "Example issuer",
"serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
"validity": {
"notBefore": "May 28 12:30:02 2019 GMT",
"notAfter": "Aug 5 09:36:04 2021 GMT"
}
}
},
"resourcePath": "/request",
"httpMethod": "GET",
"apiId": "abcdef123"
}
}
然后你需要告诉API网关它可以通过这个响应:
{
"principalId": "any-identifier-you-choose-like-uuid",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:eu-west-1:111111111111:abcdef/prod/GET/myresource"
]
}
}
还涉及缓存策略,但这应该足以让您开始。
我在使用 AWS-Cognito 保护的 AWS API 网关中有一个 API。为了使用端点,用户必须被 Cognito 识别,这将 return 一个令牌。
这里的问题与CREATE USER过程有关。为了使用此端点,用户必须存在于 Cognito 中,然后接收令牌并使用它连接到 CREATE USER 端点。但在数据库(api-端点)中创建用户时,该用户未在 Cognito 中创建,并且无权访问 API.
那么,这个过程的最佳方法应该是什么?
您不需要一直使用TOKEN 授权方。 API 网关允许您配置另一种类型的授权方:REQUEST。
在这种情况下,您完全取决于您如何判断某人是否有权(或未被授权)呼叫您的 API 端点。
event
看起来像这样(取自 AWS 文档):
{
"type": "REQUEST",
"methodArn": "arn:aws:execute-api:us-east-1:123456789012:abcdef123/test/GET/request",
"resource": "/request",
"path": "/request",
"httpMethod": "GET",
"headers": {
"X-AMZ-Date": "20170718T062915Z",
"Accept": "*/*",
"HeaderAuth1": "headerValue1",
"CloudFront-Viewer-Country": "US",
"CloudFront-Forwarded-Proto": "https",
"CloudFront-Is-Tablet-Viewer": "false",
"CloudFront-Is-Mobile-Viewer": "false",
"User-Agent": "..."
},
"queryStringParameters": {
"QueryString1": "queryValue1"
},
"pathParameters": {},
"stageVariables": {
"StageVar1": "stageValue1"
},
"requestContext": {
"path": "/request",
"accountId": "123456789012",
"resourceId": "05c7jb",
"stage": "test",
"requestId": "...",
"identity": {
"apiKey": "...",
"sourceIp": "...",
"clientCert": {
"clientCertPem": "CERT_CONTENT",
"subjectDN": "www.example.com",
"issuerDN": "Example issuer",
"serialNumber": "a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1:a1",
"validity": {
"notBefore": "May 28 12:30:02 2019 GMT",
"notAfter": "Aug 5 09:36:04 2021 GMT"
}
}
},
"resourcePath": "/request",
"httpMethod": "GET",
"apiId": "abcdef123"
}
}
然后你需要告诉API网关它可以通过这个响应:
{
"principalId": "any-identifier-you-choose-like-uuid",
"policyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:eu-west-1:111111111111:abcdef/prod/GET/myresource"
]
}
}
还涉及缓存策略,但这应该足以让您开始。