Documentation

Go SDK

The official TigerIdentity SDK for Go. Build secure, context-aware access controls with native Go support and full type safety.

Installation

Install the SDK using Go modules:

go get github.com/tigeridentity/tiger-go

Requirements: Go 1.21 or higher

Quick Start

Initialize the client and make your first access decision:

package main

import (
    "context"
    "fmt"
    "log"

    tiger "github.com/tigeridentity/tiger-go"
    "github.com/tigeridentity/tiger-go/decision"
    "github.com/tigeridentity/tiger-go/principal"
)

func main() {
    // Initialize client
    client, err := tiger.NewClient(
        tiger.WithAPIKey("your-api-key"),
        tiger.WithBaseURL("https://api.tigeridentity.com"),
    )
    if err != nil {
        log.Fatal(err)
    }
    defer client.Close()

    ctx := context.Background()

    // Evaluate access
    result, err := client.Decisions.Evaluate(ctx, &decision.EvaluateRequest{
        PrincipalID: "user-123",
        Action:      "read",
        Resource:    "document:sensitive-report",
        Context: map[string]interface{}{
            "ip_address": "203.0.113.42",
            "device_trust": "high",
        },
    })
    if err != nil {
        log.Fatal(err)
    }

    if result.Allowed {
        fmt.Println("Access granted:", result.Reason)
    } else {
        fmt.Println("Access denied:", result.Reason)
    }

    // List principals
    principals, err := client.Principals.List(ctx, &principal.ListOptions{
        Type:  principal.TypeUser,
        Limit: 50,
    })
    if err != nil {
        log.Fatal(err)
    }

    for _, p := range principals.Items {
        fmt.Printf("Principal: %s (%s)\n", p.ID, p.Type)
    }
}

Key Packages

client

Core client initialization and configuration with context support and connection pooling.

tiger.NewClient()

decision

Real-time access decisions with context-aware evaluation and caching.

client.Decisions.Evaluate()

principal

Manage identities for users, services, and AI agents with full CRUD operations.

client.Principals.Get()

policy

Create, update, and simulate access policies with versioning support.

client.Policies.Create()

Usage Examples

Creating a Policy

import (
    "github.com/tigeridentity/tiger-go/policy"
)

// Create a time-based access policy
newPolicy, err := client.Policies.Create(ctx, &policy.CreateRequest{
    Name:        "business-hours-access",
    Description: "Allow access only during business hours",
    Rules: []policy.Rule{
        {
            Effect: policy.EffectAllow,
            Conditions: []policy.Condition{
                {
                    Field:    "context.time.hour",
                    Operator: policy.OpBetween,
                    Value:    []int{9, 17},
                },
                {
                    Field:    "context.time.weekday",
                    Operator: policy.OpIn,
                    Value:    []string{"Mon", "Tue", "Wed", "Thu", "Fri"},
                },
            },
        },
    },
    Resources: []string{"project:*"},
    Actions:   []string{"read", "write"},
})
if err != nil {
    log.Fatal(err)
}

fmt.Printf("Created policy: %s\n", newPolicy.ID)

Evaluating Access with Context

import (
    "time"
)

// Evaluate with rich context
result, err := client.Decisions.Evaluate(ctx, &decision.EvaluateRequest{
    PrincipalID: "user-alice",
    Action:      "deploy",
    Resource:    "environment:production",
    Context: map[string]interface{}{
        "ip_address":    "10.0.1.42",
        "device_trust":  "high",
        "mfa_verified":  true,
        "location":      "US-West",
        "risk_score":    0.12,
        "session_age":   time.Minute * 15,
    },
})
if err != nil {
    log.Fatal(err)
}

if result.Allowed {
    // Proceed with action
    fmt.Println("Access granted")
    fmt.Printf("Matched policies: %v\n", result.MatchedPolicies)
} else {
    // Deny access
    fmt.Printf("Access denied: %s\n", result.Reason)
    if result.RequiresMFA {
        fmt.Println("MFA challenge required")
    }
}

Handling CAEP Events

import (
    "github.com/tigeridentity/tiger-go/event"
)

// Subscribe to security events
sub, err := client.Events.Subscribe(ctx, &event.SubscribeOptions{
    Types: []event.Type{
        event.TypeSessionRevoked,
        event.TypeRiskScoreChanged,
        event.TypePrincipalDisabled,
    },
})
if err != nil {
    log.Fatal(err)
}
defer sub.Close()

// Process events
for evt := range sub.Events() {
    switch evt.Type {
    case event.TypeSessionRevoked:
        fmt.Printf("Session %s revoked for principal %s\n",
            evt.SessionID, evt.PrincipalID)
        // Invalidate local session cache

    case event.TypeRiskScoreChanged:
        fmt.Printf("Risk score changed to %.2f for %s\n",
            evt.RiskScore, evt.PrincipalID)
        // Re-evaluate active sessions

    case event.TypePrincipalDisabled:
        fmt.Printf("Principal %s disabled\n", evt.PrincipalID)
        // Terminate all sessions
    }
}

Error Handling

import (
    "errors"
    "github.com/tigeridentity/tiger-go/apierror"
)

result, err := client.Decisions.Evaluate(ctx, req)
if err != nil {
    var apiErr *apierror.Error
    if errors.As(err, &apiErr) {
        switch apiErr.Code {
        case apierror.CodeNotFound:
            fmt.Printf("Principal not found: %s\n", apiErr.Message)
        case apierror.CodeRateLimited:
            fmt.Printf("Rate limited. Retry after: %v\n", apiErr.RetryAfter)
            time.Sleep(apiErr.RetryAfter)
        case apierror.CodeUnauthorized:
            fmt.Println("Invalid API key")
        default:
            fmt.Printf("API error: %s (code: %s)\n", apiErr.Message, apiErr.Code)
        }
    } else {
        // Network or other error
        log.Printf("Request failed: %v\n", err)
    }
    return
}

Configuration Options

WithAPIKey(key string)

Set the API key for authentication. Required for all API calls.

WithBaseURL(url string)

Override the default API base URL. Useful for development or self-hosted deployments.

WithTimeout(duration time.Duration)

Set request timeout. Default: 30 seconds for standard calls, 5 seconds for decisions.

WithRetry(maxRetries int)

Enable automatic retries for transient failures with exponential backoff. Default: 3 retries.

WithCache(cache cache.Cache)

Provide a custom cache implementation for decision caching. Improves performance for repeated queries.

WithLogger(logger log.Logger)

Set a custom logger for SDK debugging and request tracing.

Start building with Go

Get your API key and integrate TigerIdentity in minutes.