You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python结合Identity Server4实现网站用户管理

Identity Server4 搭配Python实现用户管理落地方案

注意:Identity Server4 是.NET生态专属的身份认证组件,不存在Python版本的实现,你不需要找Python环境下运行IS4的资源,只要将IS4作为独立鉴权中心部署,和Python服务走标准OAuth2/OIDC协议对接即可,这是目前唯一可行的落地方案。

整体部署流程

  • 第一步:部署独立的Identity Server4 实例,直接使用官方模板初始化即可,模板自带用户注册、登录、权限分配、令牌签发等核心能力,不需要修改核心逻辑,部署完成后记录下IS4的issuer地址、JWKS端点地址、客户端ID/密钥、你配置的API资源标识即可
  • 第二步:根据你Python服务使用的框架,对接IS4的鉴权能力,Python侧只需要负责验证IS4签发的JWT令牌,身份认证的核心逻辑全部由IS4侧处理

Python侧对接实现

依赖安装

根据你使用的Web框架选择对应的JWT验证依赖即可:

  • FastAPI/Starlette:安装python-jose[cryptography] + requests
  • Django:安装PyJWT + requests,也可以直接用django-oauth-toolkit做配置化对接
  • Flask:安装flask-jwt-extended + requests

核心鉴权代码示例(FastAPI场景)

from fastapi import Depends, HTTPException, status, FastAPI
from fastapi.security import OAuth2PasswordBearer
from jose import JWTError, jwt
from pydantic import BaseSettings
import requests

app = FastAPI()

# 基础配置项,替换为你自己IS4实例的对应值
class Settings(BaseSettings):
    IS4_ISSUER: str = "http://你的IS4实例地址"
    IS4_JWKS_ENDPOINT: str = f"{IS4_ISSUER}/.well-known/openid-configuration/jwks"
    API_AUDIENCE: str = "你在IS4中配置的API资源名称"

settings = Settings()
oauth2_scheme = OAuth2PasswordBearer(tokenUrl=f"{settings.IS4_ISSUER}/connect/token")

# 缓存JWKS公钥,避免每次请求都拉取
jwks_cache = None
def get_jwks():
    global jwks_cache
    if not jwks_cache:
        resp = requests.get(settings.IS4_JWKS_ENDPOINT)
        jwks_cache = resp.json()
    return jwks_cache

# 鉴权依赖,直接注入到需要登录的接口即可
async def get_validated_user(token: str = Depends(oauth2_scheme)):
    jwks = get_jwks()
    try:
        # 先提取token的kid匹配对应公钥
        unverified_header = jwt.get_unverified_header(token)
        matched_key = None
        for key in jwks["keys"]:
            if key["kid"] == unverified_header["kid"]:
                matched_key = key
                break
        if not matched_key:
            raise HTTPException(status_code=401, detail="无效的身份凭证")
        
        # 验证token签名、有效期、签发方、受众
        payload = jwt.decode(
            token,
            matched_key,
            algorithms=["RS256"],
            audience=settings.API_AUDIENCE,
            issuer=settings.IS4_ISSUER
        )
        return payload
    except JWTError:
        raise HTTPException(
            status_code=status.HTTP_401_UNAUTHORIZED,
            detail="身份凭证无效或已过期"
        )

# 接口使用示例
@app.get("/user/profile")
async def get_user_profile(current_user = Depends(get_validated_user)):
    # current_user里已经包含IS4返回的用户信息,比如sub、用户名、角色等
    return {
        "user_id": current_user["sub"],
        "username": current_user.get("name")
    }

用户管理扩展操作

如果需要在Python侧操作IS4的用户数据(比如修改用户资料、分配权限),直接调用IS4的管理API即可:

  • 可以直接使用IS4官方的Admin UI模板,自带完整的用户管理REST API
  • 在IS4侧配置API访问权限后,Python侧用requests库携带合法的访问令牌调用对应接口即可,不需要直接操作IS4的数据库

内容的提问来源于stack exchange,提问作者Alam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 09:21:02