An open API service indexing awesome lists of open source software.

https://github.com/arturoeanton/goscim

πŸš€ Lightning-fast SCIM 2.0 server in Go that makes identity management simple and scalable. Built for developers who need enterprise-grade user provisioning without the enterprise complexity.
https://github.com/arturoeanton/goscim

api authentication couchbase developer-tools docker enterprise go golang high-performance identity-management kubernetes microservices oauth open-source rbac rest-api saas scalable scim user-provisioning

Last synced: 3 months ago
JSON representation

πŸš€ Lightning-fast SCIM 2.0 server in Go that makes identity management simple and scalable. Built for developers who need enterprise-grade user provisioning without the enterprise complexity.

Awesome Lists containing this project

README

          

# πŸš€ GoSCIM - Lightning Fast Identity Management

[![Go Report Card](https://goreportcard.com/badge/github.com/arturoeanton/goscim)](https://goreportcard.com/report/github.com/arturoeanton/goscim)
[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)
[![GitHub contributors](https://img.shields.io/github/contributors/arturoeanton/goscim.svg)](https://GitHub.com/arturoeanton/goscim/graphs/contributors/)
[![GitHub issues](https://img.shields.io/github/issues/arturoeanton/goscim.svg)](https://GitHub.com/arturoeanton/goscim/issues/)
[![GitHub stars](https://img.shields.io/github/stars/arturoeanton/goscim.svg?style=social&label=Star&maxAge=2592000)](https://GitHub.com/arturoeanton/goscim/stargazers/)

> **A blazingly fast, lightweight SCIM 2.0 server built in Go that makes identity management simple and scalable** πŸ”₯

GoSCIM is the **fastest** and **most flexible** open-source implementation of the SCIM 2.0 protocol. Built with Go's performance and simplicity in mind, it's designed to handle anything from small startups to enterprise-scale identity management.

## ✨ Why GoSCIM?

- πŸš€ **Blazing Fast**: Built in Go for maximum performance and minimal resource usage
- πŸ”§ **Plug & Play**: Works out of the box with dynamic schema loading
- 🌐 **Universal**: Integrates with Active Directory, LDAP, Salesforce, Slack, and more
- πŸ“ˆ **Scalable**: From 10 users to 100,000+ with horizontal scaling
- πŸ›‘οΈ **Secure**: Enterprise-grade security with OAuth 2.0 and role-based access control
- 🎯 **SCIM 2.0 Compliant**: Full RFC 7643/7644 implementation
- πŸ” **Smart Filtering**: Advanced ANTLR-based filter parser for complex queries
- πŸ“Š **Observable**: Built-in metrics, logging, and health checks

## 🎯 Perfect For

- **Startups** building their first identity system
- **Enterprises** replacing expensive identity solutions
- **DevOps Teams** automating user provisioning
- **SaaS Companies** needing multi-tenant identity management
- **Developers** learning SCIM protocol implementation

## ⚑ Quick Start

Get GoSCIM running in under 2 minutes:

```bash
# Clone and run with Docker
git clone https://github.com/arturoeanton/goscim.git
cd goscim
docker-compose up -d

# Or build from source
go run main.go
```

Visit `http://localhost:8080/ServiceProviderConfig` to see your SCIM server in action! πŸŽ‰

## 🌟 Features That Make Developers Happy

### πŸ—οΈ **Dynamic Schema System**
No code changes needed - just drop JSON schemas and restart:

```json
{
"id": "urn:ietf:params:scim:schemas:custom:2.0:Employee",
"name": "Employee",
"attributes": [
{
"name": "employeeId",
"type": "string",
"required": true,
"uniqueness": "server"
}
]
}
```

### πŸ” **Powerful Query Engine**
Advanced filtering with natural syntax:

```http
GET /Users?filter=name.familyName co "Garcia" and active eq true
GET /Users?filter=emails[type eq "work" and value ew "@company.com"]
```

### πŸ”Œ **Easy Integrations**
Connect to any system with our flexible connector architecture:

```go
// Custom connector in just a few lines
func (c *CustomConnector) SyncUsers() error {
users := c.externalSystem.GetUsers()
for _, user := range users {
scimUser := convertToSCIM(user)
c.scimClient.CreateOrUpdateUser(scimUser)
}
return nil
}
```

## πŸ› οΈ Real-World Examples

### Create a User
```bash
curl -X POST https://your-scim-server.com/scim/v2/Users \
-H "Content-Type: application/json" \
-d '{
"schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
"userName": "jane.doe@company.com",
"name": {
"familyName": "Doe",
"givenName": "Jane"
},
"emails": [{
"value": "jane.doe@company.com",
"type": "work",
"primary": true
}],
"active": true
}'
```

### Search with Filters
```bash
curl "https://your-scim-server.com/scim/v2/Users?filter=userName sw 'admin'&sortBy=name.familyName"
```

### Update User
```bash
curl -X PATCH https://your-scim-server.com/scim/v2/Users/123 \
-H "Content-Type: application/json" \
-d '{
"schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
"Operations": [{
"op": "replace",
"path": "active",
"value": false
}]
}'
```

## πŸ—οΈ Architecture

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ Your Apps β”‚ β”‚ Identity β”‚ β”‚ External β”‚
β”‚ (Consumers) │◄──►│ Hub (GoSCIM) │◄──►│ Systems β”‚
β”‚ β”‚ β”‚ β”‚ β”‚ (Providers) β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

- **Stateless Design**: Scale horizontally with ease
- **Couchbase Backend**: NoSQL flexibility with ACID compliance
- **Microservices Ready**: Deploy as containers or serverless functions
- **Event-Driven**: Webhooks and real-time notifications

## πŸš€ Performance That Scales

| Metric | Small Team | Growing Company | Enterprise |
|--------|------------|-----------------|------------|
| **Users** | < 1,000 | < 10,000 | 100,000+ |
| **Requests/sec** | 500+ | 2,000+ | 10,000+ |
| **Response Time** | < 50ms | < 100ms | < 200ms |
| **Memory Usage** | 256MB | 1GB | 4GB+ |

*All measurements on standard cloud instances*

## 🀝 Join Our Amazing Community

We're building something special, and we'd love your help!

### 🌟 **Star us** if you find GoSCIM useful!

### πŸ› οΈ **Ways to Contribute**
- πŸ› [Report bugs](https://github.com/arturoeanton/goscim/issues/new?template=bug_report.md)
- πŸ’‘ [Suggest features](https://github.com/arturoeanton/goscim/issues/new?template=feature_request.md)
- πŸ“ [Improve documentation](https://github.com/arturoeanton/goscim/tree/main/docs)
- πŸ”§ [Submit pull requests](https://github.com/arturoeanton/goscim/pulls)
- πŸ’¬ [Join discussions](https://github.com/arturoeanton/goscim/discussions)

### 🎯 **Quick Contribution Ideas**
- Add new identity provider connectors
- Improve the web UI (coming soon!)
- Write tutorials and blog posts
- Create Docker images and Helm charts
- Add support for additional databases
- Implement advanced monitoring features

### πŸ† **Hall of Fame**
Special thanks to all our contributors! Every contribution matters, from bug reports to major features.

## πŸ“š Documentation

| Topic | Link |
|-------|------|
| πŸš€ **Getting Started** | [docs/en/getting-started.md](docs/en/getting-started.md) |
| πŸ”§ **Installation Guide** | [docs/en/installation.md](docs/en/installation.md) |
| πŸ“– **API Reference** | [docs/en/api-reference.md](docs/en/api-reference.md) |
| πŸ—οΈ **Architecture** | [docs/en/architecture.md](docs/en/architecture.md) |
| πŸ›‘οΈ **Security Guide** | [docs/en/security.md](docs/en/security.md) |
| πŸ”Œ **Integrations** | [docs/en/integrations.md](docs/en/integrations.md) |
| πŸ‘©β€πŸ’» **Developer Guide** | [docs/en/development.md](docs/en/development.md) |
| πŸš€ **Operations** | [docs/en/operations.md](docs/en/operations.md) |

### 🌍 **Multi-Language Docs**
- πŸ‡ΊπŸ‡Έ [English](docs/en/)
- πŸ‡ͺπŸ‡Έ [EspaΓ±ol](docs/es/)

## πŸ”§ Tech Stack

- **Language**: Go 1.16+
- **Database**: Couchbase (NoSQL)
- **Web Framework**: Gin
- **Query Parser**: ANTLR v4
- **Monitoring**: Prometheus & Grafana
- **Auth**: OAuth 2.0 / JWT
- **Deployment**: Docker, Kubernetes

## πŸ“Š Project Status

- βœ… **Core SCIM Operations**: CREATE, READ, UPDATE, DELETE, SEARCH
- βœ… **Advanced Filtering**: Full SCIM filter expression support
- βœ… **Schema Extensions**: Custom attributes and resource types
- βœ… **Role-Based Access**: Granular permission system
- 🚧 **Bulk Operations**: In development
- 🚧 **Web UI**: Coming soon
- πŸ“‹ **GraphQL API**: Planned
- πŸ“‹ **Event Streaming**: Planned

## πŸ’‘ Use Cases

### Identity Automation
```
Employee Onboarding β†’ GoSCIM β†’ Automatic provisioning in:
β”œβ”€β”€ Active Directory
β”œβ”€β”€ Salesforce
β”œβ”€β”€ Slack
β”œβ”€β”€ Jira
└── Custom Apps
```

### Multi-Tenant SaaS
```
Customer Signup β†’ GoSCIM β†’ Isolated tenant with:
β”œβ”€β”€ Custom schemas
β”œβ”€β”€ Role-based access
β”œβ”€β”€ Branded experience
└── API access
```

### Compliance & Audit
```
User Changes β†’ GoSCIM β†’ Automated:
β”œβ”€β”€ Audit logging
β”œβ”€β”€ Compliance reports
β”œβ”€β”€ Access reviews
└── Webhook notifications
```

## 🌟 Why Open Source?

We believe identity management should be **accessible**, **transparent**, and **community-driven**. By open-sourcing GoSCIM, we're empowering developers worldwide to build better identity solutions.

**Join us in democratizing identity management!** πŸš€

## πŸ“„ License

GoSCIM is released under the [MIT License](LICENSE). Feel free to use it in your projects, contribute back, and help us make identity management better for everyone!

**Commercial use** is welcomed, but we'd appreciate:
- 🌟 A star on GitHub
- πŸ“’ Attribution in your project
- 🀝 Contributing improvements back to the community

## πŸ™ Acknowledgments

- Built with ❀️ by [Arturo Anton](https://github.com/arturoeanton) and the community
- Inspired by the SCIM protocol and the need for simple, scalable identity management
- Special thanks to all contributors and early adopters!

---

**[⭐ Star us on GitHub](https://github.com/arturoeanton/goscim)** β€’ **[πŸ› Report Issues](https://github.com/arturoeanton/goscim/issues)** β€’ **[πŸ’¬ Join Discussions](https://github.com/arturoeanton/goscim/discussions)**

Made with ❀️ for the developer community