如何使用Authing和AWS JWT Authorizer替换Cognito

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

Authing 控制台配置

注册一个 Authing 账号

  • 访问 https://console.authing.cn,注册一个账号

  • 使用Authing和AWSJWTAuthorizer替换Cognito:实现更高效的身份认证

  • 登录进入 Authing 控制台

  • 创建一个用户池

    创建一个应用

    在应用列表找到刚刚创建的应用,点击配置。在下方签名算法处选择 RS256。

    创建用户

    进入用户管理>
    用户列表,点击右上角的新建按钮,创建两个用户,最后点击保存。

    设置 Token 自定义字段

    进入扩展能力>
    流水线 Pipeline,在最右侧「OIDC 签发 Token 前」位置,点击下面的加号。

    选择添加自定义 IdToken。

    在弹出的抽屉中,输入以下自定义代码来自定义 Token 字段。最后点击上传。

    async function pipe(user, context, callback) {
    if(user.email === '
    sample@sample.com'
    ) {
    user.addIdToken("
    companyCode"
    , "
    sample"
    )
    }
    if(user.email === '
    sample2@sample.com'
    ) {
    user.addIdToken("
    companyCode"
    , "
    sample2"
    )
    }
    callback(null, user, context)
    }

    AWS 控制台配置

    创建 API Gateway

    进入 AWS API Gateway 控制台,点击「创建 API」。

    选择 HTTP API,然后点击「构建」。

    填写 API 名称,点击「下一步」。

    点击「下一步」。

    点击「下一步」

    点击「创建」。

    创建 Lambda 函数

    进入 AWS Lambda 控制台,点击「创建函数」。

    按下图方式创建 Lambda 函数,函数名称可以任意填写。

    为 Lambda 函数添加触发器

    选择 API Gateway。

    选择刚刚创建的 API Gateway,点击「添加」。

    点击 Lambda 函数,向下滚动浏览器窗口,进入编辑界面。

    输入以下代码,用于返回 Token 中的信息,包括 companyCode。

    exports.handler = async (event) =>
    {
    // TODO implement
    const 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」。

    设置 API Gateway 路由 Authorizer

    进入 AWS API Gateway 控制台,找到刚创建的 API。

    找到刚刚为 Lambda 函数设置的触发器路由,点击「附加授权」。

    点击「创建并附加授权方」。

    选择 JWT 授权方类型

    授权方按照以下方式设置。

    上面的信息可以在 Authing 控制台找到:

    在应用>
    应用列表,找到你的应用,点击「配置」。

    发布者 URL 填写这里的 Issuer,受众填写应用 ID。

    最后点击「创建并附加」。

    到此所有配置完毕

    登录示例

    安装 NodeJS

    http://nodejs.cn/download/

    克隆项目

    git clone https://git.authing.co/yezuwei/sample-poc

    安装依赖

    cd sample-poc
    npm install

    运行

    node bin/www

    然后在浏览器访问 https://kone.authing.cn

    在登录页面输入账号和密码

    收到来自 Lambda 的响应:

    点击登出,再使用账号和密码登录

    收到来自 Lambda 的响应:

    注意 companyCode 已经根据用户的信息字段,进行逻辑判断然后返回了另外一个。



    引言
    在现代应用程序中,身份认证是必不可少的一部分。亚马逊(Amazon)提供了Cognito作为身份认证服务。Cognito确实是一个可靠且强大的服务,但它并不是唯一的选择。本篇文章将介绍如何使用Authing和AWS JWT Authorizer来替换Cognito,从而实现更高效的身份认证。
    什么是Authing
    Authing是一个身份认证服务,可以在应用程序中轻松实现用户管理。Authing提供了多种第三方登录方式,如Google和GitHub等,还支持自定义登录方式。Authing集成简单,可以帮助开发人员减轻身份认证的工作负担。
    替换Cognito的步骤
    1. 注册Authing账号并创建应用
    首先,需要注册一个Authing账号。登陆后,点击“创建应用”,填写应用名称和备注信息。这样就创建了一个新的应用,下一步需要进行配置。
    2. 配置Authing应用
    在应用设置页面,可以设定Authing应用的详细信息、用户池设置和访问控制等等。在用户池设置中,需要选择用户池的名称、设置密码策略和自定义登录方式。这些设置都将影响到用户的注册和登录。
    3. 在AWS中配置JWT Authorizer
    在AWS Lambda的API Gateway控制台上,创建或选择当前项目中的应用。并在API Gateway上开启使用API key和AWS JWT Authorizer。接下来,将认证服务器配置为JWT Authorizer,并将其部署到API Gateway上。
    4. 从JWT访问令牌获取用户ID和角色
    使用Authing作为身份认证服务之后,可以生成JWT访问令牌。这个访问令牌可以用于鉴别用户,确定用户的身份和角色。可以在应用程序的客户端使用JWT访问令牌实现用户身份验证。
    5. 调整Authing中的配置
    在Authing中,需要打开JWT配置选项,并指定对应的AWS账号和角色。这样就可以确保访问令牌的有效性,并授权对应的AWS角色执行相应的任务。
    6. 使用Authing应用查询用户信息
    使用Authing进行认证后,可以使用Authing查询用户信息。在Authing的控制台中,可以查看用户的信息和权限,从而更好地了解用户的使用情况。
    7. 调整API Gateway的配置
    最后,在API Gateway的Lambda函数控制台上,需要将Authing的配置与API Gateway进行绑定,以确保API Gateway中的访问权限正确配置。这样,就可以在使用API Gateway时,使用Authing进行身份认证,从而保证API的安全性。
    结论
    以上便是使用Authing和AWS JWT Authorizer替换Cognito的全过程。使用Authing和AWS JWT Authorizer的好处是,它们不仅可以实现基本的身份验证和角色分配,同时还可以提高应用程序的性能和安全性。鉴于Cognito的部分功能在许多API中并不需要,使用Authing和AWS JWT Authorizer的选择也将使创建API变得更加简单和方便。