Skip to main content
Permit 是一个访问控制平台,使用 RBAC、ABAC 和 ReBAC 等多种模型提供细粒度的实时权限管理。它使组织能够在其应用程序中强制执行动态策略,确保只有授权用户才能访问特定资源。

概述

本包提供两个用于 JWT 校验和权限检查的 LangChain 工具:
  • LangchainJWTValidationTool:根据 JWKS 端点校验 JWT token
  • LangchainPermissionsCheckTool:使用 Permit 检查用户权限

设置

设置以下环境变量:
PERMIT_API_KEY=your_permit_api_key
JWKS_URL=your_jwks_endpoint_url
PERMIT_PDP_URL=your_permit_pdp_url  # 本地开发通常为 http://localhost:7766,或你的实际部署地址
确保你的 PDP(策略决策点)正在 PERMIT_PDP_URL 运行。 有关策略设置和如何启动 PDP 容器的详情,请参阅 Permit 文档

凭据

PERMIT_API_KEY=
JWKS_URL=your_jwks_endpoint_url # 或你的部署地址
PERMIT_PDP_URL=your_pdp_url # 或你的部署地址
TEST_JWT_TOKEN= # 用于快速测试
设置 LangSmith 也很有帮助(但不是必须的),可以获得一流的可观测性:

实例化

JWT 校验工具

JWT 校验工具根据 JWKS(JSON Web Key Set)端点验证 JWT token。
from langchain_permit.tools import LangchainJWTValidationTool

# 初始化工具
jwt_validator = LangchainJWTValidationTool(
    jwks_url=#your url endpoint
)

配置选项

可以通过以下方式初始化工具:
  • JWKS URL
  • 直接 JWKS JSON 数据
  • 环境变量(JWKS_URL)
# 使用直接 JWKS JSON
jwt_validator = LangchainJWTValidationTool(
    jwks_json={
        "keys": [
            {
                "kid": "key-id",
                "kty": "RSA",
                ...
            }
        ]
    }
)

权限检查工具

权限检查工具与 Permit.io 集成,用于验证用户对资源的权限。
from permit import Permit
from langchain_permit.tools import LangchainPermissionsCheckTool

# 初始化 Permit 客户端
permit_client = Permit(
    token="your_permit_api_key",
    pdp=# Your PDP URL
)

# 初始化工具
permissions_checker = LangchainPermissionsCheckTool(
    permit=permit_client
)
本文档演示了两个工具的主要功能和使用模式。

调用

直接使用参数调用

JWT 校验工具

# 校验 token
async def validate_token():
    claims = await jwt_validator._arun(
        "..."  # 你的 JWT token
    )
    print("Validated Claims:", claims)

权限检查工具

# 检查权限
async def check_user_permission():
    result = await permissions_checker._arun(
        user={
            "key": "user-123",
            "firstName": "John"
        },
        action="read",
        resource={
            "type": "Document",
            "tenant": "default"
        }
    )
    print("Permission granted:", result)

输入格式

权限检查器接受不同的输入格式:
  1. 用户的简单字符串(转换为用户 key):
result = await permissions_checker._arun(
    user="user-123",
    action="read",
    resource="Document"
)
  1. 完整用户对象:
result = await permissions_checker._arun(
    user={
        "key": "user-123",
        "firstName": "John",
        "lastName": "Doe",
        "email": "john@example.com",
        "attributes": {"department": "IT"}
    },
    action="read",
    resource={
        "type": "Document",
        "key": "doc-123",
        "tenant": "techcorp",
        "attributes": {"confidentiality": "high"}
    }
)

使用 ToolCall 调用

(待补充)

链式调用

  • 待补充:添加用户问题并运行单元格
可以通过先将工具绑定到支持工具调用的模型,然后调用它,将工具集成到链中:

附加演示脚本

如需完整可运行的演示,请查看此代码库中的 /langchain_permit/examples/demo_scripts 文件夹,其中包含:
  • demo_jwt_validation.py —— 展示如何使用 LangchainJWTValidationTool 校验 JWT 的快速脚本。
  • demo_permissions_check.py —— 使用 LangchainPermissionsCheckTool 执行 Permit.io 权限检查的脚本。
设置好环境变量后,运行 python demo_jwt_validation.pypython demo_permissions_check.py 即可查看这些工具的实际效果。

API 参考

有关所有 Permit 功能和配置的详细文档,请参阅 API 参考:docs.permit.io/