Skip to main content
Connections define how users authenticate with your Auth0 tenant. They can be databases, social providers, enterprise identity providers, or passwordless methods.

Prerequisites

Ensure you have initialized a management client:
import (
    "context"
    "github.com/auth0/go-auth0/v2/management"
    "github.com/auth0/go-auth0/v2/management/client"
    "github.com/auth0/go-auth0/v2/management/option"
)

mgmt, err := client.New(
    "your-tenant.auth0.com",
    option.WithClientCredentials(
        context.Background(),
        "YOUR_CLIENT_ID",
        "YOUR_CLIENT_SECRET",
    ),
)

Connection Types

Auth0 supports various connection strategies:
  • auth0 - Auth0 database connections
  • google-oauth2, facebook, twitter, etc. - Social providers
  • samlp - SAML enterprise connections
  • oidc - OpenID Connect enterprise connections
  • waad - Azure AD connections
  • ad - Active Directory / LDAP
  • email, sms - Passwordless connections

Creating Connections

Create a custom database connection:
createRequest := &management.CreateConnectionRequestContent{
    Name:     "my-database",
    Strategy: management.ConnectionIdentityProviderEnumAuth0,
    Options: &management.ConnectionPropertiesOptions{
        PasswordPolicy: management.ConnectionPropertiesOptionsPasswordPolicyEnumGood.Ptr(),
        RequiresUsername: management.Bool(false),
        BruteForceProtection: management.Bool(true),
        EnabledDatabaseCustomization: management.Bool(false),
        ImportMode: management.Bool(false),
        DisableSignup: management.Bool(false),
        PasswordHistory: &management.ConnectionPropertiesOptionsPasswordHistory{
            Enable: management.Bool(true),
            Size:   management.Int(5),
        },
        PasswordNoPersonalInfo: &management.ConnectionPropertiesOptionsPasswordNoPersonalInfo{
            Enable: management.Bool(true),
        },
        PasswordDictionary: &management.ConnectionPropertiesOptionsPasswordDictionary{
            Enable: management.Bool(true),
        },
    },
    EnabledClients: []string{
        "client_id_1",
        "client_id_2",
    },
}

connection, err := mgmt.Connections.Create(ctx, createRequest)
if err != nil {
    return err
}

fmt.Printf("Created connection: %s (ID: %s)\n",
    *connection.GetName(),
    *connection.GetID(),
)

Reading Connections

Get a Single Connection

connectionID := "con_abc123xyz789"

connection, err := mgmt.Connections.Read(ctx, connectionID)
if err != nil {
    return err
}

fmt.Printf("Connection: %s\n", *connection.GetName())
fmt.Printf("Strategy: %s\n", *connection.GetStrategy())
fmt.Printf("Enabled Clients: %v\n", connection.EnabledClients)

List All Connections

listRequest := &management.ListConnectionsRequestParameters{}

connectionsPage, err := mgmt.Connections.List(ctx, listRequest)
if err != nil {
    return err
}

for _, conn := range connectionsPage.Results {
    fmt.Printf("Connection: %s (Strategy: %s)\n",
        *conn.GetName(),
        *conn.GetStrategy(),
    )
}

Filter by Strategy

listRequest := &management.ListConnectionsRequestParameters{
    Strategy: management.String("auth0"),
}

connectionsPage, err := mgmt.Connections.List(ctx, listRequest)

Select Specific Fields

import "net/url"

queryParams := url.Values{}
queryParams.Set("fields", "id,name,strategy,enabled_clients")
queryParams.Set("include_fields", "true")

listRequest := &management.ListConnectionsRequestParameters{}

connectionsPage, err := mgmt.Connections.List(
    ctx,
    listRequest,
    option.WithQueryParameters(queryParams),
)

Updating Connections

Update connection name and enabled clients:
updateRequest := &management.UpdateConnectionRequestContent{
    DisplayName: management.String("My Updated Database"),
    EnabledClients: []string{
        "client_id_1",
        "client_id_2",
        "client_id_3",
    },
}

connection, err := mgmt.Connections.Update(ctx, connectionID, updateRequest)

Advanced Connection Configuration

Custom Database Scripts

Configure custom database scripts for user migration:
updateRequest := &management.UpdateConnectionRequestContent{
    Options: &management.ConnectionPropertiesOptions{
        EnabledDatabaseCustomization: management.Bool(true),
        ImportMode: management.Bool(true),
        CustomScripts: map[string]interface{}{
            "login": "function login(email, password, callback) { /* your code */ }",
            "get_user": "function getUser(email, callback) { /* your code */ }",
        },
    },
}

connection, err := mgmt.Connections.Update(ctx, connectionID, updateRequest)

Attribute Mapping

Map identity provider attributes to Auth0 user profile:
updateRequest := &management.UpdateConnectionRequestContent{
    Options: &management.ConnectionPropertiesOptions{
        FieldsMap: map[string]interface{}{
            "email":       "mail",
            "given_name":  "firstName",
            "family_name": "lastName",
            "nickname":    "username",
        },
    },
}

connection, err := mgmt.Connections.Update(ctx, connectionID, updateRequest)

Connection Metadata

Add custom metadata using WithBodyProperties:
import "github.com/auth0/go-auth0/v2/management/option"

customMetadata := map[string]interface{}{
    "custom_timeout": 30,
    "retry_policy":   "exponential_backoff",
    "webhook_endpoints": []string{
        "https://api.example.com/auth-webhook",
    },
    "advanced_config": map[string]interface{}{
        "enable_debug_logs": true,
        "api_version":       "v2.1",
    },
}

updateRequest := &management.UpdateConnectionRequestContent{
    DisplayName: management.String("My Connection"),
}

connection, err := mgmt.Connections.Update(
    ctx,
    connectionID,
    updateRequest,
    option.WithBodyProperties(customMetadata),
)

Working with ExtraProperties

Some connection types support ExtraProperties in the request struct:
createRequest := &management.CreateConnectionRequestContent{
    Name:     "My Custom Connection",
    Strategy: management.ConnectionIdentityProviderEnumAuth0,
    Options: &management.ConnectionPropertiesOptions{
        ImportMode: management.Bool(true),
        ExtraProperties: map[string]interface{}{
            "custom_timeout": 30,
            "retry_policy":   "exponential_backoff",
            "webhook_endpoints": []string{
                "https://api.example.com/webhook",
            },
            "advanced_config": map[string]interface{}{
                "enable_debug_logs": true,
                "api_version":       "v2.1",
            },
        },
    },
}

connection, err := mgmt.Connections.Create(ctx, createRequest)

Managing Enabled Clients

Enable Connection for Specific Clients

updateRequest := &management.UpdateConnectionRequestContent{
    EnabledClients: []string{
        "client_id_1",
        "client_id_2",
    },
}

connection, err := mgmt.Connections.Update(ctx, connectionID, updateRequest)

Disable Connection for All Clients

updateRequest := &management.UpdateConnectionRequestContent{
    EnabledClients: []string{}, // Empty array disables for all clients
}

connection, err := mgmt.Connections.Update(ctx, connectionID, updateRequest)

Deleting Connections

err := mgmt.Connections.Delete(ctx, connectionID)
if err != nil {
    return err
}

fmt.Printf("Deleted connection: %s\n", connectionID)
Deleting a connection is permanent and will prevent users from authenticating using that connection.

Pagination

Iterate through all connections:
listRequest := &management.ListConnectionsRequestParameters{}

connectionsPage, err := mgmt.Connections.List(ctx, listRequest)
if err != nil {
    return err
}

// Note: Connections API may not support pagination iterator
// Use Results directly
for _, conn := range connectionsPage.Results {
    fmt.Printf("Connection: %s (Strategy: %s)\n",
        *conn.GetName(),
        *conn.GetStrategy(),
    )
}

Testing Connections

Before enabling a connection for production, test it thoroughly:
func testConnection(ctx context.Context, mgmt *client.Client, connectionID string) error {
    // Read the connection
    connection, err := mgmt.Connections.Read(ctx, connectionID)
    if err != nil {
        return fmt.Errorf("failed to read connection: %w", err)
    }

    // Verify configuration
    if connection.Strategy == nil {
        return fmt.Errorf("connection has no strategy")
    }

    if len(connection.EnabledClients) == 0 {
        log.Println("Warning: Connection has no enabled clients")
    }

    fmt.Printf("Connection %s is configured correctly\n", *connection.GetName())
    return nil
}

Complete Example

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/auth0/go-auth0/v2/management"
    "github.com/auth0/go-auth0/v2/management/client"
    "github.com/auth0/go-auth0/v2/management/option"
)

func main() {
    mgmt, err := client.New(
        "your-tenant.auth0.com",
        option.WithClientCredentials(
            context.Background(),
            "YOUR_CLIENT_ID",
            "YOUR_CLIENT_SECRET",
        ),
    )
    if err != nil {
        log.Fatalf("Error creating management client: %v", err)
    }

    ctx := context.Background()

    // Create a new database connection
    createRequest := &management.CreateConnectionRequestContent{
        Name:     "my-custom-database",
        Strategy: management.ConnectionIdentityProviderEnumAuth0,
        Options: &management.ConnectionPropertiesOptions{
            PasswordPolicy:       management.ConnectionPropertiesOptionsPasswordPolicyEnumGood.Ptr(),
            RequiresUsername:     management.Bool(false),
            BruteForceProtection: management.Bool(true),
            DisableSignup:        management.Bool(false),
        },
        EnabledClients: []string{
            "YOUR_CLIENT_ID",
        },
    }

    connection, err := mgmt.Connections.Create(ctx, createRequest)
    if err != nil {
        log.Fatalf("Error creating connection: %v", err)
    }

    fmt.Printf("Created connection: %s (ID: %s)\n",
        *connection.GetName(),
        *connection.GetID(),
    )

    // List all database connections
    listRequest := &management.ListConnectionsRequestParameters{
        Strategy: management.String("auth0"),
    }

    connectionsPage, err := mgmt.Connections.List(ctx, listRequest)
    if err != nil {
        log.Fatalf("Error listing connections: %v", err)
    }

    fmt.Println("\nDatabase Connections:")
    for _, conn := range connectionsPage.Results {
        fmt.Printf("- %s (Strategy: %s)\n",
            *conn.GetName(),
            *conn.GetStrategy(),
        )
    }

    // Update connection settings
    updateRequest := &management.UpdateConnectionRequestContent{
        Options: &management.ConnectionPropertiesOptions{
            PasswordPolicy: management.ConnectionPropertiesOptionsPasswordPolicyEnumExcellent.Ptr(),
            PasswordHistory: &management.ConnectionPropertiesOptionsPasswordHistory{
                Enable: management.Bool(true),
                Size:   management.Int(5),
            },
        },
    }

    updatedConnection, err := mgmt.Connections.Update(
        ctx,
        *connection.GetID(),
        updateRequest,
    )
    if err != nil {
        log.Fatalf("Error updating connection: %v", err)
    }

    fmt.Printf("\nUpdated connection password policy: %v\n",
        updatedConnection.Options.PasswordPolicy,
    )
}

Best Practices

Always enable brute force protection for database connections:
Options: &management.ConnectionPropertiesOptions{
    BruteForceProtection: management.Bool(true),
}
Set appropriate password policies based on your security requirements:
Options: &management.ConnectionPropertiesOptions{
    PasswordPolicy: management.ConnectionPropertiesOptionsPasswordPolicyEnumExcellent.Ptr(),
}
Only enable connections for the clients that need them:
EnabledClients: []string{
    "client_id_1", // Only enable for specific clients
}
Always test connection changes in a development environment first.

Next Steps

User Management

Learn how to manage users

Client Management

Learn how to manage applications

Request Options

Customize connection operations with request options