许可
Permit 是一个访问控制平台,提供基于 RBAC、ABAC 和 ReBAC 等多种模型的细粒度、实时权限管理。它使组织能够在其应用程序中实施动态策略,确保只有授权用户才能访问特定资源。
概览
此包提供了两个使用 Permit 进行 JWT 验证和权限检查的 Langchain 工具。
-
LangchainJWTValidationTool: 验证 JWT 令牌是否与 JWKS 端点匹配
-
Langchain权限检查工具:使用Permit检查用户权限
设置
设置以下环境变量:
PERMIT_API_KEY=your_permit_api_key
JWKS_URL=your_jwks_endpoint_url
PERMIT_PDP_URL=your_permit_pdp_url # Usually http://localhost:7766 for local development or your real deployment
确保您的PDP(策略决策点)正在运行在PERMIT_PDP_URL。 请参阅Permit文档以了解策略设置和如何启动PDP容器。
Credentials
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:
Instantiation
JWT验证工具
The JWT 验证工具可以验证JWT令牌是否与JWKS(JSON Web密钥集)端点匹配。
from langchain_permit.tools import LangchainJWTValidationTool
# Initialize the tool
jwt_validator = LangchainJWTValidationTool(
jwks_url=#your url endpoint
)
配置选项
您可以使用以下方式初始化工具:
- A JWKS URL
- 直接的 JWKS JSON 数据
- 环境变量 (JWKS_URL)
# Using direct JWKS JSON
jwt_validator = LangchainJWTValidationTool(
jwks_json={
"keys": [
{
"kid": "key-id",
"kty": "RSA",
...
}
]
}
)
权限检查工具
Permissions Check 工具与 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
)
此文档演示了两个工具的关键功能和使用模式。
Invocation
使用参数直接调用
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)
输入格式
The permissions checker accepts different input formats:
- 简单字符串用于用户(转换为用户密钥):
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"}
}
)
使用工具调用启动
(TODO)
链式调用
- TODO: 添加用户问题并运行单元格
我们可以通过首先将工具绑定到一个调用工具模型,然后调用来使用我们的工具在链中:
pip install -qU "langchain[openai]"
import getpass
import os
if not os.environ.get("OPENAI_API_KEY"):
os.environ["OPENAI_API_KEY"] = getpass.getpass("Enter API key for OpenAI: ")
from langchain.chat_models import init_chat_model
llm = init_chat_model("gpt-4o-mini", model_provider="openai")
Additional Demo 脚本
要查看完整的可运行示例,请查阅此仓库中的/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/