๐Ÿ“š go-iam - Awesome Go Library for Authentication and Authorization

Go Gopher mascot for go-iam

Developer-first Identity and Access Management system with a simple UI

๐Ÿท๏ธ Authentication and Authorization
๐Ÿ“‚ Authentication and Authorization
โญ 0 stars
View on GitHub ๐Ÿ”—

Detailed Description of go-iam

go-iam

codecov Go Report Card GoDoc Mentioned in Awesome Go

go-iam is a lightweight, multi-tenant Identity and Access Management (IAM) server built in Golang. It provides robust authentication and fine-grained authorization for modern applications. With support for custom roles, third-party auth providers, and multi-client setups, go-iam gives you full control over access management in a scalable and modular way.

โœ… Admin UI: go-iam-ui
๐Ÿณ Docker Setup: go-iam-docker
๐Ÿ” Backend: go-iam
๐Ÿ“ฆ SDK: go-iam-sdk
๐Ÿš€ Examples: go-iam-examples ๐Ÿ’ฌ Reddit Community: r/GoIAM

go-iam overview

โœจ Features

๐Ÿ”€ Multi-Tenancy

  • Create and manage Projects
  • Strict isolation of data between tenants

๐Ÿ” Authentication Provider Integration

  • Google, Microsoft, GitHub OAuth login support
  • Easily extendable to add more providers
  • Shared credentials support across multiple clients

๐Ÿงฉ Client Management

  • Multiple apps (clients) per project
  • Avoid duplicate OAuth credentials

๐Ÿงฑ Role-Based Access Control (RBAC)

  • Define resources and group them into roles
  • Create custom roles and assign to users
  • Granular access control for different actions/resources

๐Ÿ› ๏ธ Admin UI

  • React-based Admin interface for managing:
    • Projects
    • Users
    • Roles
    • Resources
    • Clients

๐Ÿงฐ Tech Stack

ComponentTech
BackendGolang
DatabaseMongoDB
Caching (opt)Redis
FrontendReact + Vite (PNPM)

๐Ÿš€ Getting Started

Option 1: ๐Ÿ”ง Manual Setup (Development)

Prerequisites

  • Go 1.21+
  • MongoDB
  • Redis (optional, recommended)
  • Google OAuth Credentials

Run the Backend

git clone https://github.com/melvinodsa/go-iam.git
cd go-iam
cp sample.env .env
go run main.go

Option 2: ๐Ÿณ Docker-Based Local Setup (Recommended for Testing)

Use the official go-iam-docker repo to spin up everything with Docker Compose, including:

  • MongoDB
  • Redis
  • go-iam (backend)
  • go-iam-ui (admin frontend)

Steps

git clone https://github.com/melvinodsa/go-iam-docker.git
cd go-iam-docker
cp sample.env .env
docker compose up -d

Access

๐Ÿงช Testing

Running Tests

Due to the extensive test suite in this project, it's important to use the correct testing command to avoid test caching issues that might cause local tests to pass while CI/CD fails.

Use this command for reliable testing:

go test -count=1 ./... -v --race -cover

Flags explanation:

  • -count=1: Disables test result caching to ensure fresh test runs
  • ./...: Runs tests for all packages recursively
  • -v: Verbose output showing individual test results
  • --race: Enables race condition detection
  • -cover: Shows test coverage information

Why -count=1 is important:

  • With many tests, Go may cache results and show false positives locally
  • CI/CD environments don't use cached results, leading to inconsistencies
  • This flag ensures your local testing matches CI/CD behavior

Running Specific Test Suites

# Test specific package
go test -count=1 ./services/user -v --race -cover

# Test specific function
go test -count=1 ./services/user -v --race -cover -run TestCopyUserResources

๐Ÿ“ฆ Environment Variables

Some important environment variables used in .env:

VariableDescription
LOGGER_LEVELLogger level 1 - Debug (refer., https://docs.gofiber.io/api/log/)
DB_HOSTMongoDB URI (e.g., mongodb://user:pass@host/db)
JWT_SECRETSecret key used for generating and verifying JWT tokens
REDIS_HOST, REDIS_PASSWORD, ENABLE_REDISRedis host address and toggle to enable Redis caching
ENCRYPTER_KEYOptional symmetric key for encrypting sensitive fields - change this
AUTH_PROVIDER_REFETCH_INTERVAL_IN_MINUTESInterval in minutes to refetch and sync third-party auth providers
TOKEN_CACHE_TTL_IN_MINUTESInterval for which the authentication token should be valid

License

  • Community Edition: Apache 2.0 (Open Source, free to use)