gpt4 book ai didi

amazon-web-services - 您应该使用客户端凭据授权类型来验证服务器到服务器吗?

转载 作者:行者123 更新时间:2023-12-05 07:17:06 26 4
gpt4 key购买 nike

我正在创建一个 API 服务(“我的 Api”),其中最终用户是其他 API(“客户”)。这是我的第一个应用程序,其中客户端不是真实的人,所以我想确保我正确地完成了身份验证流程。

我正在使用 AWS Cognito 并基于此 post 的“客户端凭据授予”部分进行身份验证.

我现在的流程是:

  1. 客户使用 My Api 注册
  2. My Api 在 AWS 上创建了一个应用程序客户端。我有一个简单的仪表板,它将向客户端显示 client_id 和 client_secret(我的 Api 公开了一个端点来轮换 client_secrets)
  3. 客户端将以下 POST 发送到我的 AWS oauth2 域
curl -X POST \
https://[DOMAIN_NAME].auth.[REGION].amazoncognito.com/oauth2/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'authorization: Basic BASE64(client_id:client_secret)' \
-d 'grant_type=client_credentials&scope=[SCOPE]'
  1. 客户端以 jwt 的形式从 AWS 接收 access_token
  2. 客户端将授权头中的access_token发送到My Api
  3. 我的 API 验证 access_token 是否有效
  4. My Api 提供对适用范围和 client_id 的资源的访问

我必须在 AWS Cognito 上为每个客户端创建一个应用程序客户端,这似乎很奇怪。当您使用客户端凭据而不是授权代码进行身份验证时,这是否正常?

如果是这样,有人可以告诉我每个应用程序客户端的定价是多少吗?是否位于此 page 的“直接使用其用户池凭据或社交身份提供商登录的用户:”部分中?

最佳答案

经过一段时间的思考,这就是我要做的(前言:这绝对不是AWS/Banking级别的认证)。以下代码在 postgres 中。

我会设计数据库架构以容纳多个租户 see this paper by Google for ideas .每个用户(例如,组织的员工)都会有一个 Cognito 用户,该用户将链接到该用户。

CREATE TABLE organizations (
org_id uuid
);

CREATE TABLE users (
user_id uuid,
cognito_uid uuid,
org_id uuid REFERENCES organizations(org_id)
);

CREATE TABLE secret_stuffs (
secrets varchar
);

然后我会创建一个 api_keys 表。

// We only want user to have two keys max
CREATE TYPE api_key_type AS ENUM (
'primary',
'secondary'
);

CREATE TABLE api_keys (
PRIMARY KEY (
user_id,
key_type
)

org_id uuid REFERENCES organizations(org_id),
user_id uuid REFERENCES users(user_id),
key_type api_key_type,
private_key varchar
);

// You'd probably want to create a composite index with user_id and private_key fields since we'll create a function that access both

我会锁定 api_keyssecret_stuffs 表(即,不授予对任何角色的访问权限)并创建一个 SECURITY DEFINER 函数将 user_idprivate_key 作为输入,检查该行是否存在于您的 api_keys 表中,并从 secret_stuffs< 返回您需要的任何内容 表。

关于amazon-web-services - 您应该使用客户端凭据授权类型来验证服务器到服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58896430/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com