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

使用 Authing 的 OIDC Provider 作為 AWS API gateway 的認證器,用于保護 Lambda 函數。無需編寫任何鑒權代碼,只需要在兩邊配置即可完成。同時還演示了 Authing 可以根據上下文不同情況來簽發自定義字段的 OIDC IdToken 能力。

Authing 控制臺配置

注冊一個 authing 賬號

  1. 訪問 https://console.authing.cn,注冊一個賬號

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

  1. 登錄進入 Authing 控制臺

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

創建一個用戶池

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

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

創建一個應用

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

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

在應用列表找到剛剛創建的應用,點擊配置。在下方簽名算法處選擇 RS256。

創建用戶

進入用戶管理> 用戶列表,點擊右上角的新建按鈕,創建兩個用戶,最后點擊保存。

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

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

設置 Token 自定義字段

進入擴展能力> 流水線 Pipeline,在最右側「OIDC 簽發 Token 前」位置,點擊下面的加號。

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

選擇添加自定義 IdToken。

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

在彈出的抽屜中,輸入以下自定義代碼來自定義 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) }

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

AWS 控制臺配置

創建 API Gateway

進入 AWS API Gateway 控制臺,點擊「創建 API」。

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

選擇 HTTP API,然后點擊「構建」。

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

填寫 API 名稱,點擊「下一步」。

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

點擊「下一步」。

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

點擊「下一步」

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

點擊「創建」。

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

創建 Lambda 函數

進入 AWS Lambda 控制臺,點擊「創建函數」。

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

按下圖方式創建 Lambda 函數,函數名稱可以任意填寫。

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

為 Lambda 函數添加觸發器

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

選擇 API Gateway。

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

選擇剛剛創建的 API Gateway,點擊「添加」。

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

點擊 Lambda 函數,向下滾動瀏覽器窗口,進入編輯界面。

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

輸入以下代碼,用于返回 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」。

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

設置 API Gateway 路由 Authorizer

進入 AWS API Gateway 控制臺,找到剛創建的 API。

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

找到剛剛為 Lambda 函數設置的觸發器路由,點擊「附加授權」。

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

點擊「創建并附加授權方」。

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

選擇 JWT 授權方類型

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

授權方按照以下方式設置。

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

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

應用> 應用列表,找到你的應用,點擊「配置」。

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

發布者 URL 填寫這里的 Issuer,受眾填寫應用 ID。

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

最后點擊「創建并附加」。

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

到此所有配置完畢

登錄示例

安裝 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

在登錄頁面輸入賬號和密碼

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

收到來自 Lambda 的響應:

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

點擊登出,再使用賬號和密碼登錄

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

收到來自 Lambda 的響應:

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

注意 companyCode 已經根據用戶的信息字段,進行邏輯判斷然后返回了另外一個。

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享