本文講述使用 Authing 的 OIDC Provider 做爲 AWS API Gateway 的認證器,用於保護 Lambda 函數。無需編寫任何鑑權代碼,只須要在兩邊配置便可完成。同時還演示了 Authing 能夠根據上下文不一樣狀況來簽發自定義字段的 OIDC IdToken 能力。
建立一個用戶池
建立一個應用node
在應用列表找到剛剛建立的應用,點擊配置。在下方簽名算法處選擇 RS256。git
進入用戶管理 > 用戶列表,點擊右上角的新建按鈕,建立兩個用戶,最後點擊保存。算法
進入擴展能力 > 流水線 Pipeline,在最右側「OIDC 簽發 Token 前」位置,點擊下面的加號。npm
選擇添加自定義 IdToken。瀏覽器
在彈出的抽屜中,輸入如下自定義代碼來自定義 Token 字段。最後點擊上傳。async
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 控制檯,點擊「建立 API」。ide
選擇 HTTP API,而後點擊「構建」。填寫 API 名稱,點擊「下一步」。
點擊「下一步」。
點擊「下一步」
點擊「建立」。
函數
進入 AWS Lambda 控制檯,點擊「建立函數」。按下圖方式建立 Lambda 函數,函數名稱能夠任意填寫。
spa
爲 Lambda 函數添加觸發器選擇 API Gateway。
選擇剛剛建立的 API Gateway,點擊「添加」。
點擊 Lambda 函數,向下滾動瀏覽器窗口,進入編輯界面。
輸入如下代碼,用於返回 Token 中的信息,包括 companyCode。3d
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」。
進入 AWS API Gateway 控制檯,找到剛建立的 API。
找到剛剛爲 Lambda 函數設置的觸發器路由,點擊「附加受權」。
點擊「建立並附加受權方」。
選擇 JWT 受權方類型
受權方按照如下方式設置。
上面的信息能夠在 Authing 控制檯找到:
在應用 > 應用列表,找到你的應用,點擊「配置」。
發佈者 URL 填寫這裏的 Issuer,受衆填寫應用 ID。
最後點擊「建立並附加」。
到此全部配置完畢
git clone https://git.authing.co/yezuwei/kone-poc
cd sample-poc npm install
node bin/www
而後在瀏覽器訪問 https://kone.authing.cn
在登陸頁面輸入帳號和密碼
收到來自 Lambda 的響應:
點擊登出,再使用帳號和密碼登陸
收到來自 Lambda 的響應:
注意 companyCode 已經根據用戶的信息字段,進行邏輯判斷而後返回了另一個。