scim

package
v1.3.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 23, 2026 License: MIT Imports: 12 Imported by: 0

README

GoModularAuth SCIM Plugin (gomodularauth-scim)

Go Reference

The SCIM Plugin implements the System for Cross-domain Identity Management (SCIM 2.0) protocol for automated user provisioning and de-provisioning from Okta, Azure AD / Microsoft Entra ID, and OneLogin.

Installation

go get github.com/BladiCreator/go-modular-auth/plugins/scim

Quick Start

package main

import (
	"context"

	auth "github.com/BladiCreator/go-modular-auth"
	adaptermem "github.com/BladiCreator/go-modular-auth/adapters/memory"
	"github.com/BladiCreator/go-modular-auth/plugins/scim"
	v2 "github.com/BladiCreator/go-modular-auth/plugins/scim/v2"
)

func main() {
	ctx := context.Background()

	engine, _ := auth.New(auth.Config{
		Adapter: adaptermem.NewAdapter(),
		Plugins: []auth.PluginModule{scim.New()},
	})

	provider, _ := auth.Get[scim.SCIMProvider](engine)

	// Provision user from SCIM payload
	userRes, _ := provider.CreateUser(ctx, &v2.UserResource{
		UserName:   "bob@example.com",
		ExternalID: "okta_123",
		Active:     true,
	})
	_ = userRes
}

Detailed guide: doc/plugins/scim.md.

Documentation

Overview

Package scim provides SCIM 2.0 protocol provisioning capabilities (reserved module).

Index

Constants

View Source
const (
	ModelSCIMUserMetadata = "scim_user_metadata"
	ModelSCIMGroups       = "scim_groups"
)
View Source
const PluginID = "scim"

Variables

View Source
var (
	ErrNotFound       = errors.New("scim: resource not found")
	ErrConflict       = errors.New("scim: resource conflict")
	ErrInvalidRequest = errors.New("scim: invalid request")
	ErrSchemaMismatch = errors.New("scim: schema mismatch")
)

Functions

func RegisterSchema

func RegisterSchema(s *schema.Schema) error

RegisterSchema registers SCIM user metadata and group models in the unified schema.

Types

type Config

type Config struct{}

type GroupRecord

type GroupRecord struct {
	ID          string    `json:"id"`
	DisplayName string    `json:"display_name"`
	MemberIDs   []string  `json:"member_ids"`
	CreatedAt   time.Time `json:"created_at"`
	UpdatedAt   time.Time `json:"updated_at"`
}

GroupRecord represents a provisioned SCIM group.

type Module

type Module struct {
	// contains filtered or unexported fields
}

func New

func New(opts ...Option) *Module

func (*Module) ID

func (m *Module) ID() string

func (*Module) Init

func (m *Module) Init(h *auth.Host) error

func (*Module) RegisterSchema

func (m *Module) RegisterSchema(s *schema.Schema) error

type Option

type Option func(*Config)

type SCIMProvider

type SCIMProvider interface {
	CreateUser(ctx context.Context, res *v2.UserResource) (*v2.UserResource, error)
	GetUser(ctx context.Context, id string) (*v2.UserResource, error)
	UpdateUser(ctx context.Context, res *v2.UserResource) (*v2.UserResource, error)
	DeleteUser(ctx context.Context, id string) error
	ListUsers(ctx context.Context, startIndex, count int) (*v2.ListResponse, error)

	CreateGroup(ctx context.Context, res *v2.GroupResource) (*v2.GroupResource, error)
	GetGroup(ctx context.Context, id string) (*v2.GroupResource, error)
	UpdateGroup(ctx context.Context, res *v2.GroupResource) (*v2.GroupResource, error)
	DeleteGroup(ctx context.Context, id string) error
	ListGroups(ctx context.Context, startIndex, count int) (*v2.ListResponse, error)
}

type UserMetadata

type UserMetadata struct {
	UserID     string    `json:"user_id"`
	ExternalID string    `json:"external_id"`
	Active     bool      `json:"active"`
	GivenName  string    `json:"given_name"`
	FamilyName string    `json:"family_name"`
	CreatedAt  time.Time `json:"created_at"`
	UpdatedAt  time.Time `json:"updated_at"`
}

UserMetadata stores SCIM-specific attributes bound to a Core User.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL