Permit
Permit 是一个访问控制平台,提供使用 RBAC、ABAC 和 ReBAC 等多种模型的细粒度实时权限管理。它使组织能够在其应用程序中强制执行动态策略,确保只有授权用户才能访问特定资源。
概述
此包提供了两个 Langchain 工具,用于使用 Permit 进行 JWT 验证和权限检查
- 
LangchainJWTValidationTool: 根据 JWKS 端点验证 JWT 令牌 
- 
LangchainPermissionsCheckTool: 使用 Permit 检查用户权限 
设置
设置以下环境变量
PERMIT_API_KEY=your_permit_api_key
JWKS_URL=your_jwks_endpoint_url
PERMIT_PDP_URL=your_permit_pdp_url  # Usually https://:7766 for local development or your real deployment
确保您的 PDP(策略决策点)在 PERMIT_PDP_URL 处运行。有关策略设置以及如何启动 PDP 容器的详细信息,请参阅 Permit 文档。
凭证
PERMIT_API_KEY=
JWKS_URL=your_jwks_endpoint_url # or your deployed url
PERMIT_PDP_URL=your_pdp_url # or your deployed url
TEST_JWT_TOKEN= # for quick test purposes
设置 LangSmith 也有助于实现一流的可观察性(但不是必需的)
实例化
JWT 验证工具
JWT 验证工具根据 JWKS(JSON Web Key Set)端点验证 JWT 令牌。
from langchain_permit.tools import LangchainJWTValidationTool
# Initialize the tool
jwt_validator = LangchainJWTValidationTool(
    jwks_url=#your url endpoint
)
配置选项
您可以通过以下方式初始化该工具:
- 一个 JWKS URL
- 直接 JWKS JSON 数据
- 环境变量 (JWKS_URL)
# Using direct 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
# Initialize Permit client
permit_client = Permit(
    token="your_permit_api_key",
    pdp=# Your PDP URL
)
# Initialize the tool
permissions_checker = LangchainPermissionsCheckTool(
    permit=permit_client
)
本文档演示了这两个工具的关键功能和使用模式。
调用
直接使用参数调用
JWT 验证工具
# Validate a token
async def validate_token():
    claims = await jwt_validator._arun(
        "..."  # Your JWT token
    )
    print("Validated Claims:", claims)
权限检查工具
# Check permissions
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)
输入格式
权限检查器接受不同的输入格式
- 用户的简单字符串(转换为用户键)
result = await permissions_checker._arun(
    user="user-123",
    action="read",
    resource="Document"
)
- 完整用户对象
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 调用
(待办)
链式调用
- 待办:添加用户问题并运行单元格
我们可以通过先将其绑定到工具调用模型,然后调用它,从而在链中使用我们的工具
pip install -qU "langchain[google-genai]"
import getpass
import os
if not os.environ.get("GOOGLE_API_KEY"):
  os.environ["GOOGLE_API_KEY"] = getpass.getpass("Enter API key for Google Gemini: ")
from langchain.chat_models import init_chat_model
llm = init_chat_model("gemini-2.0-flash", model_provider="google_genai")
附加演示脚本
如需可完全运行的演示,请查看此存储库中的 /langchain_permit/examples/demo_scripts 文件夹。您会找到:
- 
demo_jwt_validation.py – 一个快速脚本,展示如何使用 LangchainJWTValidationTool 验证 JWT。 
- 
demo_permissions_check.py – 一个使用 LangchainPermissionsCheckTool 执行 Permit.io 权限检查的脚本。 
只需运行 python demo_jwt_validation.py 或 python demo_permissions_check.py(设置环境变量后),即可看到这些工具的实际运行效果。
API 参考
有关所有 Permit 功能和配置的详细文档,请查阅 API 参考:https://docs.permit.io/