Skip to content
Skillpedia
Deploy & cloud (DevOps)35k · #5949

implementing-scim-provisioning-with-okta

Helps your agent automate user account creation and management in other apps using Okta SCIM.

What it does

This tool helps connect Okta (an identity management system) with other applications. It automates the creation, updating, and deletion of user accounts in those applications using a standard called SCIM.

When to use it

  • ✓When you want new user accounts to be automatically created in other systems when someone is added to Okta.
  • ✓When you want user information (like name or email) to be automatically updated across multiple systems.
  • ✓When you want user accounts to be automatically deactivated in other systems when someone leaves the company.

Example of what to ask your AI

“Set up the SCIM integration between Okta and my application to sync users.”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-scim-provisioning-with-okta/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/implementing-scim-provisioning-with-okta/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

Okta sends user information to a 'server' that you build. This server uses the SCIM standard to understand and process this information, ensuring accounts in applications are created, updated, or removed correctly.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill implementing-scim-provisioning-with-okta

Or download just the file:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/implementing-scim-provisioning-with-okta/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Implementing SCIM Provisioning with Okta

Overview

SCIM (System for Cross-domain Identity Management) is an open standard protocol (RFC 7644) that automates the exchange of user identity information between identity providers like Okta and service providers. This skill covers building a SCIM 2.0-compliant API endpoint and integrating it with Okta for automated user lifecycle management including provisioning, deprovisioning, profile updates, and group management.

When to Use

  • When deploying or configuring implementing scim provisioning with okta capabilities in your environment
  • When establishing security controls aligned to compliance requirements
  • When building or improving security architecture for this domain
  • When conducting security assessments that require this implementation

Prerequisites

  • Okta tenant with admin access (Developer or Production)
  • Application with REST API capable of user management
  • TLS-secured endpoint (HTTPS required)
  • Okta API token or OAuth 2.0 client credentials
  • Python 3.9+ with Flask or FastAPI

Core Concepts

SCIM 2.0 Protocol

SCIM defines a standard schema for representing users and groups via JSON, with a RESTful API for CRUD operations:

Operation HTTP Method Endpoint Description
Create User POST /scim/v2/Users Provisions a new user account
Read User GET /scim/v2/Users/{id} Retrieves user details
Update User PUT/PATCH /scim/v2/Users/{id} Modifies user attributes
Delete User DELETE /scim/v2/Users/{id} Removes user account
List Users GET /scim/v2/Users Lists users with filtering
Create Group POST /scim/v2/Groups Creates a group
Manage Group PATCH /scim/v2/Groups/{id} Add/remove group members

Okta SCIM Integration Architecture

Okta (IdP) ──SCIM 2.0 over HTTPS──> SCIM Server ──> Application Database
     │                                     │
     ├── User Assignment                   ├── Create/Update User
     ├── User Unassignment                 ├── Deactivate User
     ├── Profile Push                      ├── Sync Attributes
     └── Group Push                        └── Manage Groups

Required SCIM Endpoints

  1. ServiceProviderConfig (/scim/v2/ServiceProviderConfig): Advertises SCIM capabilities
  2. ResourceTypes (/scim/v2/ResourceTypes): Describes supported resource types
  3. Schemas (/scim/v2/Schemas): Publishes the SCIM schema definitions
  4. Users (/scim/v2/Users): User lifecycle operations
  5. Groups (/scim/v2/Groups): Group management operations

Workflow

Step 1: Build SCIM 2.0 API Server

Create a Flask-based SCIM server that implements the core endpoints. The server must handle:

  • User CRUD: Create, read, update, delete, and list users
  • Filtering: Support eq filter on userName (required by Okta)
  • Pagination: Return startIndex, itemsPerPage, and totalResults
  • Authentication: Bearer token validation on all endpoints
from flask import Flask, request, jsonify
import uuid
from datetime import datetime

app = Flask(__name__)

# Bearer token for Okta authentication
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}"
        }
    }
    # Persist user to database
    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))

…
FAQ

What is SCIM?

SCIM is a standard that defines how different systems should exchange user information automatically and securely.

What is Okta?

Okta is a platform that manages who has access to which applications within a company.

Do I need to know how to code to use this?

Yes, programming knowledge is required to build the SCIM server and configure the integration with Okta.

Details

Original description by the author

Implement automated user lifecycle provisioning and deprovisioning using the SCIM 2.0 protocol with Okta as the identity provider. Use when automating account creation, attribute sync, or deactivation across downstream applications through Okta SCIM integration, or when troubleshooting SCIM provisioning failures.

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularity

GitHub stars
35k
Ranking position
#5949
License
Apache-2.0
Updated
8/31/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills