跳到主要内容

常见用例

在本节中,我们将提供一些示例,帮助你理解一些场景中 自定义令牌声明 的用处,为你提供一些参考。这样,当你在访问管理中遇到困难时,可以评估自定义令牌声明是否能为你带来便利。

实现基于属性的访问控制 (ABAC)

基于属性的访问控制 (ABAC) 是一种使用属性(如用户角色、资源属性和环境条件)来做出访问控制决策的访问控制模型。这是一种灵活且动态的方式来管理对受保护资源的访问。

假设你正在构建一个应用程序,该应用程序的发布分为两个阶段:公开测试版和正式发布。即使在应用程序正式发布后,你也希望参与公开测试版的老用户继续使用付费功能。

在应用程序正式发布后,你可以使用 Logto 的 基于角色的访问控制 (RBAC) 功能来实现对付费功能使用的访问控制。为了轻松检查用户是否在公开测试阶段已经使用该应用程序,你可以使用 getCustomJwtClaims() 方法在令牌负载中添加一个声明 createdAt

然后,在你的受保护 API 中进行访问控制时,你需要允许满足以下任一条件的访问令牌:

  1. 在 RBAC 上下文中,具有访问付费资源的权限。
  2. createdAt 早于公开测试阶段的结束时间。

如果没有自定义令牌声明功能,在验证 受保护 API 资源 的权限时,需要调用 Logto Management API 来检查当前访问令牌的用户是否具有某个 API 资源所需角色对应的权限。

在类似的场景中,假设你的应用程序在登录页面上显示生日祝福,如果用户的生日临近。你可以使用自定义令牌声明在 令牌负载 中添加一个生日字段,用于确定是否显示特定消息。

手动阻止令牌签发

假设 Joe 正在运营一款网络游戏,并使用 Logto 作为 身份和访问管理 (IAM) 系统。

假设这款游戏需要充值以购买游戏时间。Joe 在他的游戏服务中记录每个用户的余额,并随着游戏时间的累积不断扣除余额。Joe 希望在账户余额耗尽时强制玩家退出游戏,以鼓励他们充值。

此时,Joe 也可以使用 Logto 提供的自定义令牌声明功能来实现这一点:

  1. 在脚本中,可以使用外部 API 调用 获取外部数据 从 Joe 的游戏服务器检索当前玩家的余额。
  2. 如果余额小于或等于 0,可以使用 api.denyAccess() 方法阻止令牌签发。

此时,由于无法获得新的有效访问令牌,玩家将被强制退出游戏。