为了正确回答您的问题,我们需要更多信息。
- 能否将内部工作流配置为使用 REST 服务?
- 内部工作流支持哪些身份验证流程?
SDK 或没有 SDK
您可以通过生成的 SDK 或您自己的代码访问 API Gateway 中的网络服务。
从 API Gateway 控制台生成 SDK 的说明位于 here。
使用身份验证调用 Web 服务可以通过 IAM、API 密钥、Cognito、自定义授权者四种方式完成。我将提到前三个。
IAM
- 第 1 步,在 IAM 中使用访问密钥和密钥创建用户。
- 第 2 步也是设置角色以使用 IAM 访问 API。去
IAM,选择角色,创建角色,并授予它访问您的
API 网关功能。看起来像这样:
IAM 政策示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": [
"arn:aws:iam::account-id:user/Alice",
"account-id"
]
},
"Action": "execute-api:Invoke",
"Resource": [
"arn:aws:execute-api:region:account-id:api-id/stage/GET/pets"
]
}
]
}
将此角色分配给您创建的用户。策略示例可用here.。有关包括本地证书等的更多身份验证选项,请查看here。
- 第 3 步,使用 AWS 密钥和密钥 SDK 调用 API。
API 密钥
如果您向 API 添加密钥,移动应用程序将失败,因为它没有这些密钥。最好部署一个不同版本的 API,它可以包装现有的 API,可以提供特定于工作流的附加功能。要了解如何执行此操作,请关注此link。
API 密钥的优点是您可以限制对 API 网关功能的访问、随意删除密钥、回收它们等。
Cognito - 联合用户
您的移动用户实际上是使用federated users 进行身份验证的。但是,其中一个联合用户频道恰好是认知频道。您可以添加更多,OpenAuth、Google、Facebook、SAML 等,在这里您可以添加客户端使用的身份验证类型。然后,用户将使用他们的用户名和密码向客户端安全提供程序进行身份验证,然后这些凭据通过联合用户传递到 API,因此必须设置联合用户以使用与您的客户端相同的身份验证机制。见下文blog post
对于这个解决方案,我们有多种选择。 1. 通过联合用户将用户凭据传递给 API,这假设用户界面调用 Web 服务,但正如您提到的那样,它是工作流,并且我假设用户不会像使用移动应用程序那样直接访问该服务。即服务被机器作为服务器上的后台进程调用。这意味着该解决方案将不起作用。选项 2. 是为客户端创建一个新用户。这与通过移动应用程序访问服务相同。为此,您需要在客户端上做一些额外的工作,因为您需要检索临时访问令牌。
- 步骤 1. 使用 SDK,或自行编写 API 接口。
- 第 2 步。在 Cognito 中生成一个用户供后端系统使用。
- 步骤 3. 使用 cognito 用户获取访问令牌
- 步骤 4. 使用访问令牌访问 API 中的 Web 服务
网关。
建议的解决方案
创建 API 的第二个版本作为移动 API 的包装器或扩展,并使用上述 API 密钥。为什么?
- 可以限制对 API 的访问
- 不同的版本意味着您可以扩展它并添加特定于工作流的附加功能
- 最容易实现,因为没有密钥交换,这样的更新
请求标头。
编辑:我对解决方案 2 的建议不正确。 AWS 文档说following 要将 API 方法包含在使用计划中,您必须配置单个 API 方法以需要 API 密钥。对于用户身份验证和授权,请勿使用 API 密钥。使用 IAM 角色、Lambda 授权方或 Amazon Cognito 用户池。
AWS 还说以下内容可用于controlled access
-
资源策略让您可以创建基于资源的策略,以允许或拒绝从指定源 IP 访问您的 API 和方法
地址或 VPC 端点。
-
标准 AWS IAM 角色和策略提供灵活且强大的访问控制,可应用于整个 API 或个人
方法。
-
跨域资源共享 (CORS) 可让您控制 API 如何响应跨域资源请求。
-
Lambda 授权者 是使用不记名令牌身份验证以及控制对 API 方法的访问的 Lambda 函数
标题、路径、查询字符串、阶段描述的信息
变量或上下文变量请求参数。
-
Amazon Cognito 用户池可让您创建可自定义的身份验证和授权解决方案。
-
客户端 SSL 证书可用于验证对后端系统的 HTTP 请求是否来自 API 网关。
-
使用计划让您可以向客户提供 API 密钥,然后跟踪和限制每个 API 的 API 阶段和方法的使用
键。
并非所有上述方法都用于授权,例如 CORS 实际上保护用户免受跨站点脚本的影响,并且如所示 API 密钥仅用于使用计划。资源策略只是通过限制对 IP 地址的访问来进一步保护 API,因此您唯一的选择实际上是选项 1 中描述的 IAM 角色,以及选项 3 中描述的联合用户或您自己的自定义 lambda 授权,如果您使用的是 Lambda,或者如果您使用的不是用 API Gateway 包装的 lambda,则您自己的授权人。