使用 Authing 替换 Cognito 方案

本文讲述使用 Authing 的 OIDC Provider 作为 AWS API Gateway 的认证器 , 用于保护 Lambda 函数 。 无需编写任何鉴权代码 , 只需要在两边配置即可完成 。 同时还演示了 Authing 可以根据上下文不同情况来签发自定义字段的 OIDC IdToken 能力 。
Authing 控制台配置注册一个 Authing 账号

  1. 访问, 注册一个账号

使用 Authing 替换 Cognito 方案文章插图
2. 登录进入 Authing 控制台
使用 Authing 替换 Cognito 方案文章插图
创建一个用户池
使用 Authing 替换 Cognito 方案文章插图
使用 Authing 替换 Cognito 方案文章插图
创建一个应用
使用 Authing 替换 Cognito 方案文章插图
使用 Authing 替换 Cognito 方案文章插图
在应用列表找到刚刚创建的应用 , 点击配置 。 在下方签名算法处选择 RS256 。
创建用户
进入用户管理 > 用户列表 , 点击右上角的新建按钮 , 创建两个用户:steve.zhang@kone.com 和 steve.zhang2@kone.com , 密码为 123456 , 最后点击保存 。
使用 Authing 替换 Cognito 方案文章插图
使用 Authing 替换 Cognito 方案文章插图
设置 Token 自定义字段
【使用 Authing 替换 Cognito 方案】进入扩展能力 > 流水线 Pipeline , 在最右侧「OIDC 签发 Token 前」位置 , 点击下面的加号 。
使用 Authing 替换 Cognito 方案文章插图
选择添加自定义 IdToken 。
使用 Authing 替换 Cognito 方案文章插图
在弹出的抽屉中 , 输入以下自定义代码来自定义 Token 字段 。 最后点击上传 。
async function pipe(user, context, callback) {if(user.email === 'steve.zhang@kone.com') {user.addIdToken("companyCode", "kone")}if(user.email === 'steve.zhang2@kone.com') {user.addIdToken("companyCode", "kone2")}callback(null, user, context)}
使用 Authing 替换 Cognito 方案文章插图
AWS 控制台配置创建 API Gateway
进入 AWS API Gateway 控制台 , 点击「创建 API」 。
使用 Authing 替换 Cognito 方案文章插图
选择 HTTP API , 然后点击「构建」 。
使用 Authing 替换 Cognito 方案文章插图
填写 API 名称 , 点击「下一步」 。
使用 Authing 替换 Cognito 方案文章插图
点击「下一步」 。
使用 Authing 替换 Cognito 方案文章插图
点击「下一步」
使用 Authing 替换 Cognito 方案文章插图
点击「创建」 。
使用 Authing 替换 Cognito 方案文章插图
创建 Lambda 函数
进入 AWS Lambda 控制台 , 点击「创建函数」 。
使用 Authing 替换 Cognito 方案文章插图
按下图方式创建 Lambda 函数 , 函数名称可以任意填写 。
使用 Authing 替换 Cognito 方案文章插图
为 Lambda 函数添加触发器
使用 Authing 替换 Cognito 方案文章插图
选择 API Gateway 。
使用 Authing 替换 Cognito 方案文章插图
选择刚刚创建的 API Gateway , 点击「添加」 。
使用 Authing 替换 Cognito 方案文章插图
点击 Lambda 函数 , 向下滚动浏览器窗口 , 进入编辑界面 。
使用 Authing 替换 Cognito 方案文章插图
输入以下代码 , 用于返回 Token 中的信息 , 包括 companyCode 。
exports.handler = async (event) => {// TODO implementconst token = event.headers.authorization.replace('Bearer ', '');const claims = event.requestContext.authorizer.claims;const response = {statusCode: 200,body: JSON.stringify({token,claims,companyCode: claims.companyCode})};return response;};最后点击「Deploy」 。
使用 Authing 替换 Cognito 方案文章插图