使用 Authing 的 OIDC Provider 作為 AWS API Gateway 的認證器,用於保護 Lambda 函數。無需編寫任何鑑權程式碼,只需要在兩邊配置即可完成。同時也示範了 Authing 可以根據上下文不同情況來簽發自訂欄位的 OIDC IdToken 能力。
註冊一個Authing 帳號
訪問https://console.authing.cn,註冊一個帳號
登入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) }
建立 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 已经根据用户的信息字段,进行逻辑判断然后返回了另外一个。
以上是如何使用Authing和AWS JWT Authorizer替換Cognito的詳細內容。更多資訊請關注PHP中文網其他相關文章!