Installasi SSO Authentik dengan Nginx-Proxy-Manager

· 6 min read
Installasi SSO Authentik dengan Nginx-Proxy-Manager
Photo by Philipp Katzenberger / Unsplash

Apa itu autentik?

authentik adalah Penyedia Identitas sumber terbuka yang berfokus pada fleksibilitas dan keserbagunaan. Anda dapat menggunakan authentik di lingkungan yang ada untuk menambahkan dukungan untuk protokol baru, mengimplementasikan pendaftaran/pemulihan/dll. di aplikasi Anda sehingga Anda tidak perlu menghadapinya, dan banyak hal lainnya

Welcome | authentik
Bring all of your authentication into a unified platform.

Apa itu Nginx-Proxy-Manager?

Manajer proksi Nginx (NPM) adalah sistem manajemen proksi terbalik yang berjalan di Docker. NPM didasarkan pada server Nginx dan menyediakan antarmuka web yang bersih, efisien, dan indah kepada pengguna untuk pengelolaan yang lebih mudah. Alat ini mudah diatur dan tidak mengharuskan pengguna mengetahui cara bekerja dengan server Nginx atau sertifikat SSL. NPM adalah alat sumber terbuka yang dikelola oleh pengembang dari seluruh dunia. Ini sangat cocok untuk lingkungan server kecil dan lingkungan laboratorium pribadi. Tutorial ini akan fokus untuk menunjukkan kepada Anda cara menerapkan manajer proxy Nginx:

Apa yang kita lakukan di sini?

Saya akan mencoba menjelaskan cara menyiapkan mekanisme otentikasi SSO yang dapat digunakan untuk proyek lab rumah Anda (Nextcloud, Bitwarden, dll). Semua ini kami coba capai dengan menggunakan docker

Prasyarat

  1. Instalasi Manajer Proksi Nginx(https://npm.example.com)
  2. Instalasi Server Otentik(https://auth.example.com)
  3. Aplikasi apa pun yang dihosting untuk diuji(https://app.example.com)
  4. Beberapa waktu ;)

Menginstal Manajer Proksi Nginx

Saya tidak akan menjelaskan secara mendalam cara menginstal NPM, Anda dapat mengikuti panduan di bawah ini. mengharapkan Anda memiliki server NPM yang berjalan yang dapat menjadi server sebagai proxy terbalik dan mengelola Sertifikat SSL.

Instal Nginx Proxy Manager (NPM) dengan Docker
Nginx adalah server populer dan proksi terbalik yang digunakan untuk merutekan dan mengarahkan lalu lintas web. Menyiapkan Nginx sebagai reverse proxy dapat memakan waktu dan rentan terhadap kesalahan dan kesalahan konfigurasi. Nginx Proxy Manager (NPM) adalah sistem manajemen proksi terbalik yang berjalan di Docker. NPM didasarkan pada server Nginx dan

Menginstal Server SSO Authentik

docker-compose di sini.

Unduh docker-compose.yml terbaru dari di sini. Tempatkan di direktori pilihan Anda.

Jika ini adalah instalasi autentik baru, jalankan perintah berikut untuk menghasilkan kata sandi

# You can also use openssl instead: `openssl rand -base64 36`
sudo apt-get install -y pwgen
echo "PG_PASS=$(pwgen -s 40 1)" >> .env
echo "AUTHENTIK_SECRET_KEY=$(pwgen -s 50 1)" >> .env
# Skip if you don't want to enable error reporting
echo "AUTHENTIK_ERROR_REPORTING__ENABLED=true" >> .env

Anda dapat menyesuaikan file .env berdasarkan kebutuhan Anda. Saya akan menyertakan pengaturan dasar yang memerlukan server ini aktif dan berjalan.

AUTHENTIK_PORT_HTTP=9090
AUTHENTIK_PORT_HTTPS=9443
PG_PASS=i4YC0VKCDzro4i6mlJxXUEsYZIp2MkDazKoArQHv
AUTHENTIK_SECRET_KEY=AebaI13oxBJCylYU8RIcyrQvSjic0tv1y9V70RRDooPtPzVsAU
AUTHENTIK_ERROR_REPORTING__ENABLED=true



.env

Berjalan di port khusus

Secara default, authentik mendengarkan pada port 9000 untuk HTTP dan 9443 untuk HTTPS. Untuk mengubahnya, Anda dapat mengatur variabel berikut di .env.

AUTHENTIK_PORT_HTTP=9090
AUTHENTIK_PORT_HTTPS=9443

di atas .env file Anda dapat melihat saya telah mengubah port menjadi 9090 dan 9443. anda dapat mengubahnya berdasarkan pilihan anda, pastikan port di server anda kosong

Variabel tingkat lanjut .env dapat ditemukan di sini.

Mulai Server Authentik

setelah Anda mengunduh file docker-compose.yml dan .env, jalankan perintah ini untuk memulai server.

docker-compose pull
docker-compose up -d

File penulisan secara statis mereferensikan versi terbaru yang tersedia pada saat mengunduh file penulisan, yang dapat diganti dengan variabel lingkungan AUTHENTIK_TAG.

autentik kemudian akan dapat dijangkau pada port 9090 (HTTP) dan port 9443 (HTTPS).

Untuk memulai penyiapan awal, navigasikan ke .https://<your server>/if/flow/initial-setup/. Di sana Anda akan diminta untuk menyetel sandi untuk pengguna akadmin

Tambahkan autentik ke NPM

Setelah Anda memulai server autentik, Anda perlu mengeksposnya ke internet dengan sertifikat FQDN dan SSL yang valid. tambahkan host proxy di NPM

pastikan Anda dapat mengaktifkan Websockets Support seperti di atas. Tambahkan sertifikat yang valid dari tab SSL. setelah semuanya selesai. Anda akan dapat mengakses autentik dari https://auth.example.com

Aktifkan SSO ke Aplikasi

Inilah bagian terakhirnya, anggaplah Anda menjalankan aplikasi di https://app.example.com dan perlu menambahkan autentikasi pada aplikasi tersebut.

masuk ke panel admin instalasi autentik Anda

Buat Penyedia Baru

Pilih Providers pada tab Application di sebelah kiri. Buat baruProxy Provider

Name: Your apps name
Authorization Flow: Authorize Application IMPLICIT content (this makes things easier)
Type : Forward auth (single application)
External Host: Your app address https://app.example.com

Buat Aplikasi Baru

Pilih Applications dari sisi kiri dan Buat aplikasi baru seperti di bawah ini.

pastikan Anda memilih penyedia yang dibuat di atas.

Ubah Pos terdepan

Pilih Pos Luar seperti yang ditunjukkan di bawah ini, dan Pilih tombol edit.

Pilih aplikasi Anda pada tab Application. jika Anda memiliki beberapa aplikasi, Anda perlu menahan tombol control dan memilih semua. jika tidak, pengalihan tidak akan berhasil. setelah selesai memperbarui.

Tambahkan Proxy Pass di Nginx-Proxy-Manager

setelah Anda membuat dan mengkonfigurasi aplikasi Anda di authentik, Anda perlu memberi tahu NPM untuk meneruskan permintaan otentikasi ke server authentik

login ke Server NPM dan edit entri proksi aplikasi. dan Pilih Advanced tab

Anda perlu menempelkan kode di bawah ini.

# Increase buffer size for large headers
# This is needed only if you get 'upstream sent too big header while reading response
# header from upstream' error when trying to access an application protected by goauthentik
proxy_buffers 8 16k;
proxy_buffer_size 32k;

location / {
    # Put your proxy_pass to your application here
    proxy_pass          $forward_scheme://$server:$port;

    # authentik-specific config
    auth_request        /outpost.goauthentik.io/auth/nginx;
    error_page          401 = @goauthentik_proxy_signin;
    auth_request_set $auth_cookie $upstream_http_set_cookie;
    add_header Set-Cookie $auth_cookie;

    # translate headers from the outposts back to the actual upstream
    auth_request_set $authentik_username $upstream_http_x_authentik_username;
    auth_request_set $authentik_groups $upstream_http_x_authentik_groups;
    auth_request_set $authentik_email $upstream_http_x_authentik_email;
    auth_request_set $authentik_name $upstream_http_x_authentik_name;
    auth_request_set $authentik_uid $upstream_http_x_authentik_uid;

    proxy_set_header X-authentik-username $authentik_username;
    proxy_set_header X-authentik-groups $authentik_groups;
    proxy_set_header X-authentik-email $authentik_email;
    proxy_set_header X-authentik-name $authentik_name;
    proxy_set_header X-authentik-uid $authentik_uid;
}

# all requests to /outpost.goauthentik.io must be accessible without authentication
location /outpost.goauthentik.io {
    proxy_pass          http://auth.example.com/outpost.goauthentik.io;
    # ensure the host of this vserver matches your external URL you've configured
    # in authentik
    proxy_set_header    Host $host;
    proxy_set_header    X-Original-URL $scheme://$http_host$request_uri;
    add_header          Set-Cookie $auth_cookie;
    auth_request_set    $auth_cookie $upstream_http_set_cookie;

    # required for POST requests to work
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";
}

# Special location for when the /auth endpoint returns a 401,
# redirect to the /start URL which initiates SSO
location @goauthentik_proxy_signin {
    internal;
    add_header Set-Cookie $auth_cookie;
    return 302 /outpost.goauthentik.io/start?rd=$request_uri;
    # For domain level, use the below error_page to redirect to your authentik server with the full redirect path
    # return 302 https://authentik.company/outpost.goauthentik.io/start?rd=$scheme://$http_host$request_uri;
}

Pastikan Anda telah mengubah konfigurasi pass proxy autentik. baik Anda dapat menggunakan alamat IP internal dengan nomor port atau alamat publik

proxy_pass https://auth.example.com/outpost.goauthentik.io;
proxy_pass http://10.10.20.25:9090/outpost.goauthentik.io;

Uji Loginnya

Setelah semuanya selesai, Anda dapat mengakses aplikasi Anda, Anda akan diarahkan ke login SSO.

Masalah Umum setelah Instalasi

mencantumkan beberapa masalah umum yang saya lihat di komentar postingan saya dan postingan Reddit.

1. Mendapatkan kesalahan 500 setelah instalasi

Penyebab umumnya adalah instance Authentik tidak dapat dijangkau dari instalasi NPM, Anda perlu memastikan kedua instance tersebut dapat dijangkau.

Coba ubah alamat instance Authentik menjadi alamat IP atau nama host dengan nomor port yang relevan.

Sebagai pengguna GitHub Matt-ghub Anda dapat menempatkan Authentik dan NPM di jaringan Docker yang sama dan menggunakan alamat IP Authentik dan nomor port di pos terdepan konfigurasi. Berikut komentarnya

2. Mendapatkan kesalahan WebSocket

Jika Anda mendapatkan kesalahan WebSocket ini atau yang serupa, pastikan Anda telah mengaktifkan opsi WebSocket di host proxy NPM, seperti yang saya sebutkan dalam panduan saya. Namun, jika Anda mengalami masalah, ikuti resmi tentang proxy terbalik dan sesuaikan konfigurasi AndaPanduan Otentik

3. Status Posko Tidak Sehat di dashboard

Biasanya hal ini terjadi jika ada sesuatu yang salah pada file docker-compose.yml Anda. cobalah membuat ulang tumpukan atau lakukan docker-compose down dan docker-compose up

4. Masalah Otentik dengan Web KASM

Saya telah menerima komentar di kotak masuk saya mengenai Masalah Authentik dengan KASM Web, jika ada yang menghadapi masalah, Silakan lihat postingan reddit ini

Anda mungkin perlu menambahkan header tambahan seperti di bawah ini di Konfigurasi Nginx

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";