为Casdoor构建的Python SDK
项目描述
casdoor-python-sdk
Casdoor的Python SDK允许您轻松地将应用程序连接到Casdoor身份验证系统,而无需从头开始实现。
Casdoor-python-sdk可在PyPI上获取
$ pip install casdoor
Casdoor SDK易于使用。以下我们将展示步骤。
步骤1. 初始化配置
初始化需要5个参数,都是字符串类型
名称(顺序) | 必须 | 描述 |
---|---|---|
endpoint | 是 | Casdoor服务器URL,例如 http://localhost:8000 |
client_id | 是 | Application.client_id |
client_secret | 是 | Application.client_secret |
certificate | 是 | 与Casdoor证书相同 |
org_name | 是 | 组织名称 |
application_name | 是 | 应用程序名称 |
from casdoor import CasdoorSDK
certificate = b'''-----BEGIN CERTIFICATE-----
MIIE+TCCAuGgAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMDYxHTAbBgNVBAoTFENh
...
-----END CERTIFICATE-----'''
sdk = CasdoorSDK(
endpoint,
client_id,
client_secret,
certificate,
org_name,
application_name,
)
或者使用异步版本
from casdoor import AsyncCasdoorSDK
certificate = b'''-----BEGIN CERTIFICATE-----
MIIE+TCCAuGgAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMDYxHTAbBgNVBAoTFENh
...
-----END CERTIFICATE-----'''
sdk = AsyncCasdoorSDK(
endpoint,
client_id,
client_secret,
certificate,
org_name,
application_name,
)
步骤2. 通过Casdoor服务器进行授权
此时,我们应该使用一些方法来验证Casdoor服务器。
首先,我们希望您清楚地了解Casdoor的验证过程。以下段落将提到想要使用Casdoor作为验证手段的您的应用程序,以及Casdoor作为 Casdoor
。
-
APP
将向Casdoor
发送请求。
由于Casdoor
是基于UI的OAuth提供者,您不能使用Postman这样的请求管理服务发送带参数的URL并返回JSON文件。 -
尝试它的最简单方法是,在浏览器中输入URL(在其中可以执行JavaScript来运行UI)。
-
在浏览器中按此格式输入URL:
endpoint/login/oauth/authorize?client_id=xxx&response_type=code&redirect_uri=xxx&scope=read&state=xxx
在这个URL中,endpoint
是您的Casdoor位置,如步骤1中所述;然后需要您自行填写xxx
。
提示
-
redirect_uri
是您的APP
配置为监听来自Casdoor
响应的URL。例如,如果您的redirect_uri
是https://forum.casbin.com/callback
,则Casdoor将向该URL发送请求,并附带两个参数code
和state
,这些参数将在后续步骤中用于认证。 -
state
通常是您应用程序的名称,您可以在Casdoor
的Applications
选项卡下找到它,最左侧的Name
列给出了每个应用程序的名称。 -
当然,您希望您的
APP
能够发送URL。例如,您应该有一个按钮,并携带这个URL。所以当您点击按钮时,您应该被重定向到Casdoor
进行验证。现在您只是在浏览器中输入它进行测试。
步骤3. 获取令牌并解析
Casdoor验证通过后,它将带有步骤2中提到的代码和状态重定向到您的应用程序,例如:https://forum.casbin.com/callback?code=xxx&state=yyyy
。
您的Web应用程序可以获取code
并调用get_oauth_token(code=code)
,然后解析jwt令牌。
一般流程如下
token = sdk.get_oauth_token(code=code)
access_token = token.get("access_token")
decoded_msg = sdk.parse_jwt_token(access_token) # or sdk.parse_jwt_token(access_token, kwargs)
decoded_msg
是从access_token
解码的JSON数据,其中包含用户信息和其他有用信息。
步骤4. 与用户交互
casdoor-python-sdk支持基本用户操作,如
get_user(user_id: str)
,通过用户名获取一个用户。get_users()
,获取所有用户。modify_user(method: str, user: User)/add_user(user: User)/update_user(user: User)/delete_user(user: User)
,将用户写入数据库。refresh_token_request(refresh_token: str, scope: str)
,刷新访问令牌enforce(self, permission_model_name: str, sub: str, obj: str, act: str, v3: Optional[str], v4: Optional[str], v5: Optional[str])
,从模型检查权限batch_enforce(self, permission_model_name: str, permission_rules: list[list[str]])
,批量从模型检查权限get_user_count(is_online: bool = None)
,获取用户数量。
资源所有者密码凭证授权
如果您的应用程序没有将用户重定向到Casdoor的前端,并且您已启用密码凭证授权,则可以像这样获取访问令牌
token = sdk.get_oauth_token(username=username, password=password)
access_token = token.get("access_token")
decoded_msg = sdk.parse_jwt_token(access_token) # or sdk.parse_jwt_token(access_token, kwargs)
decoded_msg
是从access_token
解码的JSON数据,其中包含用户信息和其他有用信息。
客户端凭证授权
当您的应用程序没有前端时,您也可以使用客户端凭证授权。需要注意的是,以这种方式获得的AccessToken与其他不同,它对应于应用程序而不是用户。
token = sdk.get_oauth_token()
access_token = token.get("access_token")
decoded_msg = sdk.parse_jwt_token(access_token) # or sdk.parse_jwt_token(access_token, kwargs)
decoded_msg
是从access_token
解码的JSON数据。
项目详情
下载文件
下载您平台的文件。如果您不确定该选择哪一个,请了解有关安装包的更多信息。