常见用例
在本节中,我们将提供一些示例,帮助你理解一些场景中 自定义令牌声明 的用处,为你提供一些参考。这样,当你在访问管理中遇到困难时,可以评估自定义令牌声明是否能为你带来便利。
实现基于属性的访问控制 (ABAC)
基于属性的访问控制 (ABAC) 是一种使用属性(如用户角色、资源属性和环境条件)来做出访问控制决策的访问控制模型。这是一种灵活且动态的方式来管理对受保护资源的访问。
假设你正在构建一个应用程序,该应用程序的发布分为两个阶段:公开测试版和正式发布。即使在应用程序正式发布后,你也希望参与公开测试版的老用户继续使用付费功能。
在应用程序正式发布后,你可以使用 Logto 的 基于角色的访问控制 (RBAC) 功能来实现对付费功能使用的访问控制。为了轻松检查用户是否在公开测试阶段已经使用该应用程序,你可以使用 getCustomJwtClaims()
方法在令牌负载中添加一个声明 createdAt
。
然后,在你的受保护 API 中进行访问控制时,你需要允许满足以下任一条件的访问令牌:
- 在 RBAC 上下文中,具有访问付费资源的权限。
createdAt
早于公开测试阶段的结束时间。
如果没有自定义令牌声明功能,在验证 受保护 API 资源 的权限时,需要调用 Logto Management API 来检查当前访问令牌的用户是否具有某个 API 资源所需角色对应的权限。
在类似的场景中,假设你的应用程序在登录页面上显示生日祝福,如果用户的生日临近。你可以使用自定义令牌声明在 令牌负载 中添加一个生日字段,用于确定是否显示特定消息。
手动阻止令牌签发
假设 Joe 正在运营一款网络游戏,并使用 Logto 作为 身份和访问管理 (IAM) 系统。
假设这款游戏需要充值以购买游戏时间。Joe 在他的游戏服务中记录每个用户的余额,并随着游戏时间的累积不断扣除余额。Joe 希望在账户余额耗尽时强制玩家退出游戏,以鼓励他们充值。
此时,Joe 也可以使用 Logto 提供的自定义令牌声明功能来实现这一点:
- 在脚本中,可以使用外部 API 调用 获取外部数据 从 Joe 的游戏服务器检索当前玩家的余额。
- 如果余额小于或等于 0,可以使用
api.denyAccess()
方法阻止令牌签发。
此时,由于无法获得新的有效访问令牌,玩家将被强制退出游戏。