使用 Authing 的 OIDC Provider 作為 AWS API gateway 的認證器,用于保護 Lambda 函數。無需編寫任何鑒權代碼,只需要在兩邊配置即可完成。同時還演示了 Authing 可以根據上下文不同情況來簽發自定義字段的 OIDC IdToken 能力。
Authing 控制臺配置
注冊一個 authing 賬號
-
登錄進入 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 已經根據用戶的信息字段,進行邏輯判斷然后返回了另外一個。