Samba & SMB Web Access Through Sambee With Automatic HTTPS & OIDC SSO

This article explains how to set up Sambee in a Docker container as a web interface for browser-based access to a Samba or SMB file server, complete with automatic HTTPS certificates (via Caddy) and OpenID Connect single sign-on (via Authelia).

This article is part of a mini-series about running Samba Active Directory and a file server service in a Docker container on a home server:

Sambee Installation

Installing Sambee via its Docker image is straightforward (docs).

Preparation

I’m assuming that you’ve set up Docker, the Caddy container and a Samba file server as described in previous articles.

Dockerized Sambee Directory Structure

This is what the directory structure will look like when we’re done:

rpool/
 └── encrypted/
     └── docker/
         └── sambee/
             ├── data/
             └── docker-compose.yml

We’re placing the configuration on the encrypted ZFS dataset (rpool/encrypted).

Create the new directories and set their ownership to user/group ID 1000, which is used by the containerized application:

mkdir -p /rpool/encrypted/docker/sambee/data
chown -Rfv 1000:1000 /rpool/encrypted/docker/sambee/data

Sambee Docker Compose File

Create docker-compose.yml with the following content:

services:

  sambee:
    container_name: sambee
    hostname: sambee
    # Release channels:
    # test: preview builds
    # beta: prerelease builds
    # stable: production builds (not available yet)
    image: ghcr.io/helgeklein/sambee:beta
    restart: unless-stopped
    networks:
      caddy_caddynet:                           # Frontend communications
    expose:
      - 8000                                    # Web UI, Sambee to Caddy
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./data:/app/data

networks:
  caddy_caddynet:
    external: true

Start the Sambee Container And Retrieve the Initial Admin Password

Navigate into the directory with docker-compose.yml and run:

docker compose up -d

When the Sambee container is first started, it sets up the required files in the data subdirectory, creates an admin user, and prints the password only once.

Run the following to retrieve the initial admin password:

docker compose logs sambee --tail 100 | grep -A 5 "FIRST-TIME SETUP"

Let’s Encrypt Certificate for Sambee via Caddy

Caddyfile

Add the following to Caddyfile (details):

files.{$MY_DOMAIN} {
	reverse_proxy sambee:8000 {
	}
	tls {
		dns cloudflare {env.CLOUDFLARE_API_TOKEN}
	}
}

DNS A Record

Add the following A record to your DNS domain:

files.home.yourdomain.com 192.168.0.4     # replace with your Docker host's IP address

Try to resolve the name on a machine in your network (e.g., nslookup files.home.yourdomain.com).

Reload Caddy’s Configuration

Instruct Caddy to reload its configuration by running:

docker exec -w /etc/caddy caddy caddy reload

You should now be able to access the Sambee web interface at https://files.home.yourdomain.com without getting a certificate warning from your browser.

SSO to Sambee via OpenID Connect (OIDC) Authentication to Authelia

This section describes how to set up single sign-on to Sambee via OpenID Connect authentication to Authelia. It is based on the Sambee OIDC docs.

Sambee: Retrieve OIDC Callback URI

Access Sambee’s UI at https://files.home.yourdomain.com and sign in as admin with the password you retrieved earlier.

Navigate to Settings by clicking the gear icon or pressing Ctrl+,, select Network, and enter your equivalent of https://files.home.yourdomain.com in Public URL. Save the changes.

Select the Authentication category, choose OIDC as Authentication mode, and click Configure OIDC. In the dialog that opens, copy the Redirect URI. You’ll need it for the Authelia configuration in the next step.

Authelia: Configure OpenID Connect IdP

Client Secret

The shared secret between Sambee and Authelia is entered as plaintext in the Sambee UI but as a hash of the plaintext in Authelia’s configuration. Create a new secret by running the following command (docs):

docker run --rm authelia/authelia:latest authelia crypto hash generate pbkdf2 --variant sha512 --random --random.length 72 --random.charset rfc3986

The relevant command output looks like this:

Random Password: v0e1zWJhvKQYud1lVUx4XhLibOwp0zyd
Digest: $pbkdf2-sha512$310000$vFbvgWgmhAIdZCbcLsrrXA$yRENW40rZpWLUP2ABQglEAhIHgpl7QAJ3eq8ZDEMmEHDL9Rro3eGwQ/4u05JsSLsEO5NIw.iAWVbo7EsiL8V1w

The random password is your plaintext secret whereas the digest is your hashed secret.

YAML Configuration File

Add the following to the Authelia configuration file config/configuration.yml (details):

identity_providers:
  oidc:
    lifespans:
      custom:
        sambee:
          # Maximum useful length: Sambee's interactive sign-in interval + 1 day
          refresh_token: '31d'
    clients:
      - client_id: sambee
        client_name: Sambee
        # Replace the client_secret value with the hashed secret you generated
        client_secret: 'HASHED_SECRET_GOES_HERE'
        redirect_uris:
          - https://files.home.yourdomain.com/api/auth/oidc/callback
        grant_types:
          - authorization_code
          - refresh_token
        response_types:
          - code
        lifespan: sambee
        scopes:
          - openid
          - profile
          - email
          - offline_access
          # Add groups when using group admission or group-based role mappings.
          - groups

Restart Authelia

Navigate to the authelia directory and run:

docker compose restart

Inspect the container logs for errors with the command docker compose logs --tail 30 --timestamps.

Sambee: Enable OIDC Authentication

Return to Sambee’s Configure OIDC dialog and fill out the fields as follows:

  • Provider name: Authelia
  • Issuer URL: https://auth.home.yourdomain.com (adjust to your domain)
  • Client ID: sambee
  • Client secret: fill in the plaintext secret you generated above
  • Scopes: openid, profile, email, groups, offline_access
  • Admission: All authenticated users
  • Role assignment: All users are assigned to the same role
  • Assigned role: Editor

Create Access Group (Optional)

If you want to limit access to Sambee to the members of a certain group:

  1. Open an interactive shell in your Samba container: docker exec -it samba bash
  2. Create a group: samba-tool group add sambee_access --groupou="OU=Groups,OU=My"
  3. Add members to the new group: samba-tool group addmembers sambee_access USERNAME

Modify the following in Sambee’s Configure OIDC dialog:

  • Admission: All authenticated users
  • Admission groups: sambee_access

Connect and test

Click Connect and test. This prompts you to sign in via OIDC to verify two things:

  1. OIDC authentication works with the values you provided
  2. Your account will still be a Sambee admin once logging in via OIDC

If the test is successful, click Activate configuration.

OIDC Users are Auto-Provisioned in Sambee

That’s it! With the above configuration, OIDC users can sign in to Sambee. If you configured an access group, Sambee requires OIDC users to be members of that group.

It’s not necessary to create users in Sambee. When OIDC is enabled, your IdP becomes the source of truth, and users are automatically provisioned in Sambee.

You can, of course, inspect and manage users in Sambee: navigate to Settings > User Management and take a look around.

Changelog

2026-08-11

Comments

Related Posts

Latest Posts