本文讲述使用 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 已经根据用户的信息字段,进行逻辑判断而后返回了另一个。