背景
Serverless 框架是近年来非常流行的一种云计算框架,它的出现极大的方便了开发人员的开发以及部署工作。在使用 Serverless 框架开发的过程中可以借助 API Gateway 进行路由以及权限控制,但是如果需要更细粒度的接口鉴权管理,怎么处理呢?
方案一:使用 Lambda Authorizer
实际上 Serverless 框架已经提供了一种接口鉴权的方法,那就是使用 Lambda Authorizer。Lambda Authorizer 是一个逻辑单元,它会在 API Gateway 中介于客户端和后端服务之间,根据特定的授权策略对请求进行验证。Lambda Authorizer 在验证通过时会附加一个策略到入站请求中,并将请求转发到后端服务。
以下是一个实现 Lambda Authorizer 的示例代码:
-- -------------------- ---- ------- ---------------------- - ----- ------- -------- -- - ------------------- ---------- ------ -- ------- ----- ----- - ------------------------- --- - -- -- ----- ----- ---- - ----- ------------------- ----- ------ - -------------------- -------- ----------------- ------ ------- - ----- --- - --------------- ----- ------ - ------------------ ------- ----------------- ------ ------- - -- -------- --------------------------- ------- --------- - ----- ------------ - --- ------------------------ - ------------ -- ------- -- --------- - ----- -------------- - --- ----- --------- - --- ---------------- - --------------------- ---------------- - ------- ------------------ - --------- ------------------------ - ------------ --------------------------- - --------------- - ------ ------------- -
该代码实现了一个简单的 Token 鉴权逻辑,在 API Gateway 中使用该 Lambda Authorizer 可以根据自己的权限规则判断是否允许访问某个接口。
方案二:使用如 Authing 这样的三方服务
除了自己实现 Lambda Authorizer 之外,还可以考虑使用已有的三方服务,例如 Authing 等。具体实现方式如下:
- 用户使用 Authing 提供的 SDK 登录系统并得到 AccessToken
- 在 API Gateway 中将访问 Token 改为 Authing 的 AccessToken,并额外传递一个 Authing 的 AppID
- 在 Lambda 中调用 Authing 的 SDK 进行验证,根据验证结果判断是否有权限访问该接口
以下是一个使用 Authing SDK 验证 Token 的示例代码:
-- -------------------- ---- ------- ----- - -------------------- - - -------------------------- ----- -------- ------------------ ------ - ----- ---------- - --- ---------------------- ------ --- --- - ----- ---- - ----- ----------------------------------- ------ ----- - ----- --- - --------------------- ----- ------- --- ------ ----- - -
该代码实现了一个从 Authing 中验证 Token 的逻辑,在应用的过程中,我们应该将 AppID 和 AppSecret 存入到环境变量中,避免暴露在代码中。
结论
使用 Serverless 框架进行开发的过程中,接口鉴权是必须要考虑的一个问题。在本文中,我们介绍了两种在 Serverless 框架中做接口鉴权的方案。方案一是自己开发 Lambda Authorizer,方案二则是使用已有的三方服务,例如 Authing 等。无论是哪种方案,开发人员都可以根据自己的业务需求进行选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/674ecfe7e884a3e30f2a2a14