Implements SCIM 2.0 API server in Python using Flask or FastAPI for Okta user provisioning, deprovisioning, updates, groups, and lifecycle management.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cybersecurity-skills-zh:implementing-scim-provisioning-with-oktaThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
SCIM(System for Cross-domain Identity Management,跨域身份管理系统)是一种开放标准协议(RFC 7644),用于自动化 Okta 等身份提供商与服务提供商之间的用户身份信息交换。本技能涵盖构建符合 SCIM 2.0 的 API 端点,并与 Okta 集成,实现包括用户配置、取消配置、配置文件更新和组管理在内的自动化用户生命周期管理。
SCIM(System for Cross-domain Identity Management,跨域身份管理系统)是一种开放标准协议(RFC 7644),用于自动化 Okta 等身份提供商与服务提供商之间的用户身份信息交换。本技能涵盖构建符合 SCIM 2.0 的 API 端点,并与 Okta 集成,实现包括用户配置、取消配置、配置文件更新和组管理在内的自动化用户生命周期管理。
SCIM 通过 JSON 定义了表示用户和组的标准 schema,以及 CRUD 操作的 RESTful API:
| 操作 | HTTP 方法 | 端点 | 描述 |
|---|---|---|---|
| 创建用户 | POST | /scim/v2/Users | 配置新用户账户 |
| 读取用户 | GET | /scim/v2/Users/{id} | 获取用户详情 |
| 更新用户 | PUT/PATCH | /scim/v2/Users/{id} | 修改用户属性 |
| 删除用户 | DELETE | /scim/v2/Users/{id} | 删除用户账户 |
| 列出用户 | GET | /scim/v2/Users | 带过滤条件列出用户 |
| 创建组 | POST | /scim/v2/Groups | 创建组 |
| 管理组 | PATCH | /scim/v2/Groups/{id} | 添加/移除组成员 |
Okta (IdP) ──SCIM 2.0 over HTTPS──> SCIM 服务器 ──> 应用数据库
│ │
├── 用户分配 ├── 创建/更新用户
├── 用户取消分配 ├── 停用用户
├── 配置文件推送 ├── 同步属性
└── 组推送 └── 管理组
/scim/v2/ServiceProviderConfig):公告 SCIM 功能/scim/v2/ResourceTypes):描述支持的资源类型/scim/v2/Schemas):发布 SCIM schema 定义/scim/v2/Users):用户生命周期操作/scim/v2/Groups):组管理操作创建基于 Flask 的 SCIM 服务器,实现核心端点。服务器必须处理:
userName 上的 eq 过滤条件(Okta 要求)startIndex、itemsPerPage 和 totalResultsfrom flask import Flask, request, jsonify
import uuid
from datetime import datetime
app = Flask(__name__)
# Okta 认证使用的 Bearer Token
SCIM_BEARER_TOKEN = "your-secure-token-here"
def require_auth(f):
def wrapper(*args, **kwargs):
auth = request.headers.get("Authorization", "")
if not auth.startswith("Bearer ") or auth[7:] != SCIM_BEARER_TOKEN:
return jsonify({"detail": "Unauthorized"}), 401
return f(*args, **kwargs)
wrapper.__name__ = f.__name__
return wrapper
@app.route("/scim/v2/Users", methods=["POST"])
@require_auth
def create_user():
data = request.json
user_id = str(uuid.uuid4())
user = {
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"id": user_id,
"userName": data.get("userName"),
"name": data.get("name", {}),
"emails": data.get("emails", []),
"active": True,
"meta": {
"resourceType": "User",
"created": datetime.utcnow().isoformat() + "Z",
"lastModified": datetime.utcnow().isoformat() + "Z",
"location": f"/scim/v2/Users/{user_id}"
}
}
# 将用户持久化到数据库
return jsonify(user), 201
@app.route("/scim/v2/Users", methods=["GET"])
@require_auth
def list_users():
filter_param = request.args.get("filter", "")
start_index = int(request.args.get("startIndex", 1))
count = int(request.args.get("count", 100))
# 解析过滤条件: userName eq "[email protected]"
# 使用过滤条件查询数据库
return jsonify({
"schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
"totalResults": 0,
"startIndex": start_index,
"itemsPerPage": count,
"Resources": []
})
创建 SCIM 应用集成:
配置 SCIM 连接:
https://your-app.com/scim/v2userName启用配置功能:
将 Okta 用户配置文件属性映射到 SCIM schema:
| Okta 属性 | SCIM 属性 | 方向 |
|---|---|---|
| login | userName | Okta -> 应用 |
| firstName | name.givenName | Okta -> 应用 |
| lastName | name.familyName | Okta -> 应用 |
| emails[type eq "work"].value | Okta -> 应用 | |
| department | urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:department | Okta -> 应用 |
SCIM 指定了标准错误响应格式:
{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"],
"detail": "用户已存在",
"status": "409",
"scimType": "uniqueness"
}
常见错误代码:400(错误请求)、401(未授权)、404(未找到)、409(冲突)、500(服务器内部错误)。
Okta 提供自动化 SCIM 测试套件(通过 Runscope/BlazeMeter),验证您的 SCIM 实现是否符合所有必需操作:
userName eq "..." 过滤的用户搜索正常工作startIndex、count)正确处理active: false(而非硬删除)add、replace、remove 操作npx claudepluginhub killvxk/cybersecurity-skills-zhImplements SCIM 2.0-compliant API endpoints for automated user/group provisioning, deprovisioning, updates, and management with Okta IdP using Python Flask/FastAPI.
Implements SCIM 2.0 provisioning with Okta for automated user lifecycle management including creation, updates, deprovisioning, and group sync.
Implements SCIM 2.0 provisioning with Okta for automated user lifecycle management including creation, updates, deprovisioning, and group sync.