Solusi SSO untuk Nginx menggunakan modul auth_request. Vouch Proxy dapat melindungi semua website Anda sekaligus.
Vouch Proxy mendukung banyak penyedia login OAuth dan OIDC dan dapat menerapkan otentikasi ke...
GitHub
Perusahaan GitHub
IndieAuth
Oke
Kendur
ADFS
Azure AD
Alibaba / Aliyun iDaas
AWS Kognito
Berkedut
Perselisihan
SecureAuth
Gitea
jubah kunci
Perpustakaan Server OAuth2 untuk PHP
Asisten Rumah
OpenStax
Ory Hydra
awan berikutnya
sebagian besar penyedia OpenID Connect (OIDC) lainnya
Harap beri tahu kami ketika Anda telah menerapkan Vouch Proxy dengan IdP atau perpustakaan pilihan Anda sehingga kami dapat memperbarui daftarnya.
Jika Vouch berjalan pada host yang sama dengan proxy balik Nginx, waktu respons dari titik akhir /validate
ke Nginx harus kurang dari 1 ms .
Apa Fungsi Proxy Vouch...
Instalasi dan Konfigurasi
Voucher Proxy "di jalur"
Konfigurasi Nginx Tambahan
Konfigurasi melalui Variabel Lingkungan
Tip, Trik dan Konfigurasi Lanjutan
Cakupan dan Klaim
Berjalan dari Docker
Masuknya Kubernetes Nginx
Kompilasi dari sumber dan menjalankan biner
/login dan /logout pengalihan titik akhir
Pemecahan Masalah, Dukungan dan Permintaan Fitur (Baca ini sebelum mengirimkan masalah di GitHub)
Saya mendapatkan loop pengalihan tak terbatas yang mengembalikan saya ke IdP saya (Google/Okta/GitHub/...)
Oke, saya telah melihat masalahnya dan telah mencoba beberapa hal dengan konfigurasi saya tetapi masih tidak berhasil
Berkontribusi pada Vouch Proxy
Otorisasi Tingkat Lanjut Menggunakan OpenResty
Alur login dan autentikasi menggunakan Google Oauth
Vouch Proxy (VP) memaksa pengunjung untuk masuk dan mengautentikasi dengan IdP (seperti salah satu layanan yang tercantum di atas) sebelum mengizinkan mereka mengakses situs web.
VP juga dapat digunakan sebagai solusi Single Sign On (SSO) untuk melindungi semua aplikasi web di domain yang sama.
Setelah pengunjung login, Vouch Proxy memungkinkan akses ke situs web yang dilindungi selama beberapa jam. Setiap permintaan diperiksa oleh VP untuk memastikan validitasnya.
VP dapat mengirimkan email pengunjung, nama dan informasi lain yang disediakan IdP (termasuk token akses) ke aplikasi web sebagai header HTTP. VP dapat digunakan untuk menggantikan manajemen pengguna aplikasi sepenuhnya.
Vouch Proxy mengandalkan kemampuan untuk berbagi cookie antara server Vouch Proxy dan aplikasi yang dilindunginya. Biasanya hal ini dilakukan dengan menjalankan Vouch pada subdomain seperti vouch.yourdomain.com
dengan aplikasi yang berjalan di app1.yourdomain.com
dan app2.yourdomain.com
. Domain yang dilindungi adalah .yourdomain.com
dan cookie Proksi Vouch harus disetel di domain ini dengan menyetel vouch.domains untuk menyertakan yourdomain.com
atau terkadang dengan menyetel vouch.cookie.domain ke yourdomain.com
.
cp ./config/config.yml_example_$OAUTH_PROVIDER ./config/config.yml
buat kredensial OAuth untuk Vouch Proxy di google atau github, dll
pastikan untuk mengarahkan URL panggilan balik ke titik akhir Vouch Proxy /auth
konfigurasikan Nginx...
Konfigurasi Nginx berikut mengasumsikan..
Nginx, vouch.yourdomain.com
dan protectedapp.yourdomain.com
berjalan di server yang sama
kedua domain disajikan sebagai https
dan memiliki sertifikat yang valid (jika tidak, ubah menjadi listen 80
dan setel vouch.cookie.secure ke false
)
server {dengarkan 443 ssl http2; nama_server protectedapp.domainanda.com; akar /var/www/html/; ssl_certificate /etc/letsencrypt/live/protectedapp.domainanda.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.domainanda.com/privkey.pem; # kirim semua permintaan ke titik akhir `/validasi` untuk otorisasi auth_request /validasi; location = /validate { # meneruskan permintaan /validate ke Vouch Proxy proxy_pass http://127.0.0.1:9090/validate; # pastikan untuk meneruskan header host asli proxy_set_header Host $http_host; # Vouch Proxy hanya bertindak pada header permintaan proxy_pass_request_body off; proxy_set_header Panjang Konten ""; # secara opsional tambahkan X-Vouch-User seperti yang dikembalikan oleh Vouch Proxy bersama dengan permintaan auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user; # secara opsional tambahkan X-Vouch-IdP-Claims-* klaim khusus yang Anda lacak # auth_request_set $auth_resp_x_vouch_idp_claims_groups $upstream_http_x_vouch_idp_claims_groups; # auth_request_set $auth_resp_x_vouch_idp_claims_given_name $upstream_http_x_vouch_idp_claims_given_name; # secara opsional menambahkan X-Vouch-IdP-AccessToken atau X-Vouch-IdP-IdToken # auth_request_set $auth_resp_x_vouch_idp_accesstoken $upstream_http_x_vouch_idp_accesstoken; # auth_request_set $auth_resp_x_vouch_idp_idtoken $upstream_http_x_vouch_idp_idtoken; # nilai kembalian ini digunakan oleh panggilan @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; # Vouch Proxy dapat berjalan di belakang proxy terbalik Nginx yang sama # mungkin harus mematuhi penamaan server "upstream" # proxy_pass http://vouch.domainanda.com/validate; # proxy_set_header Tuan rumah $http_host; } # jika validasi mengembalikan `401 tidak diotorisasi` maka teruskan permintaan ke error401block error_page 401 = @error401; location @ error401 { # redirect ke Vouch Proxy untuk login kembali 302 https://vouch.domainanda.com/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$ auth_resp_err; # Anda biasanya *ingin* mengalihkan ke Vouch yang berjalan di belakang konfigurasi Nginx yang sama yang dilindungi oleh https # tetapi untuk memulai, Anda cukup meneruskan pengguna akhir ke port yang dijalankan oleh Vouch # return 302 http://vouch.domainanda.com:9090/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$auth_resp_err; } lokasi / { # meneruskan permintaan resmi ke layanan Anda protectedapp.domainanda.com proxy_pass http://127.0.0.1:8080; # Anda mungkin perlu mengatur variabel-variabel ini di blok ini sesuai https://github.com/vouch/vouch-proxy/issues/26#issuecomment-425215810 # auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user # auth_request_set $auth_resp_x_vouch_idp_claims_groups $upstream_http_x_vouch_idp_claims_groups; # auth_request_set $auth_resp_x_vouch_idp_claims_given_name $upstream_http_x_vouch_idp_claims_given_name; # setel header pengguna (biasanya email) proxy_set_header X-Vouch-User $auth_resp_x_vouch_user; # secara opsional meneruskan klaim khusus apa pun yang Anda lacak # proxy_set_header X-Vouch-IdP-Claims-Groups $auth_resp_x_vouch_idp_claims_groups; # proxy_set_header X-Vouch-IdP-Klaim-Diberikan_Nama $auth_resp_x_vouch_idp_claims_given_name; # opsional meneruskan accesstoken atau idtoken # proxy_set_header X-Vouch-IdP-AccessToken $auth_resp_x_vouch_idp_accesstoken; # proxy_set_header X-Vouch-IdP-IdToken $auth_resp_x_vouch_idp_idtoken; } }
Jika Vouch dikonfigurasi di belakang nginx reverseproxy yang sama (mungkin agar Anda dapat mengkonfigurasi ssl) pastikan untuk meneruskan header Host
dengan benar, jika tidak, cookie JWT tidak dapat diatur ke dalam domain
server {dengarkan 443 ssl http2; nama_server vouch.domainanda.com; ssl_certificate /etc/letsencrypt/live/vouch.domainanda.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vouch.domainanda.com/privkey.pem; lokasi / { proxy_pass http://127.0.0.1:9090; # pastikan untuk meneruskan header host asli proxy_set_header Host $http_host; } }
Mulai v0.33.0
Vouch Proxy dapat disajikan dalam lokasi (jalur) Nginx dengan mengonfigurasi vouch.document_root: /vp_in_a_path
Hal ini menghindari kebutuhan untuk menyiapkan domain terpisah untuk Vouch Proxy seperti vouch.yourdomain.com
. Misalnya login VP akan dilayani dari https://protectedapp.yourdomain.com/vp_in_a_path/login
server {dengarkan 443 ssl http2; nama_server protectedapp.domainanda.com; ssl_certificate /etc/letsencrypt/live/protectedapp.domainanda.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.domainanda.com/privkey.pem; # Lokasi ini melayani semua titik akhir Proxy Vouch sebagai /vp_in_a_path/$uri # termasuk /vp_in_a_path/validate, /vp_in_a_path/login, /vp_in_a_path/logout, /vp_in_a_path/auth, /vp_in_a_path/auth/$STATE, dll. lokasi /vp_in_a_path { proxy_pass http://127.0.0.1:9090; # tidak boleh! ada garis miring di bagian akhir proxy_set_header Host $http_host; proxy_pass_request_body tidak aktif; proxy_set_header Panjang Konten ""; # nilai kembalian ini digunakan oleh panggilan @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; } # jika /vp_in_a_path/validate mengembalikan `401 tidak diotorisasi` maka teruskan permintaan ke error401block error_page 401 = @error401; location @ error401 { # redirect ke Vouch Proxy untuk login kembali 302 https://protectedapp.domainanda.com/vp_in_a_path/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error =$auth_resp_err; } lokasi / { auth_request /vp_in_a_path/validasi; proxy_pass http://127.0.0.1:8080; # lihat konfigurasi Nginx di atas untuk header tambahan yang dapat diatur dari Vouch Proxy } }
Konfigurasi Nginx tambahan dapat ditemukan di direktori contoh.
Berikut pengaturan minimal menggunakan OAuth Google...
VOUCH_DOMAINS=domainanda.com OAUTH_PROVIDER=google OAUTH_CLIENT_ID=1234 OAUTH_CLIENT_SECRET=rahasiarahasia OAUTH_CALLBACK_URL=https://vouch.domainanda.com/auth ./vouch-proxy
Nama variabel lingkungan didokumentasikan di config/config.yml_example
Semua daftar dengan beberapa nilai harus dipisahkan dengan koma: VOUCH_DOMAINS="yourdomain.com,yourotherdomain.com"
Variabel VOUCH_CONFIG
dapat digunakan untuk mengatur lokasi alternatif untuk file konfigurasi. VOUCH_ROOT
dapat digunakan untuk mengatur direktori root alternatif untuk Vouch Proxy untuk mencari file dukungan.
Semua item konfigurasi Vouch Proxy didokumentasikan di config/config.yml_example
Cache Proxy Vouch /validate
respons di Nginx
Menangani permintaan OPTIONS
saat melindungi API dengan Vouch Proxy
Validasi oleh Tim GitHub atau GitHub Org
Menjalankan VP di Raspberry Pi menggunakan image Docker berbasis ARM
Arsitektur Kubernetes pasca masuknya
atur HTTP_PROXY
untuk menyampaikan permintaan IdP Proksi Vouch melalui server proksi keluar
Proksi Terbalik untuk Layanan Google Cloud Run
Aktifkan TLS asli di Vouch Proxy
Dukungan FreeBSD
startup systemd
dari Vouch Proxy
Menggunakan Node.js alih-alih Nginx untuk merutekan permintaan
Mengembangkan Aplikasi Halaman Tunggal (SPA) sambil menggunakan API yang dilindungi VP
Integrasikan Vouch Proxy ke dalam aplikasi sisi server untuk User Authn dan Authz
Filter berdasarkan alamat IP sebelum validasi VP dengan menggunakan satisfy any;
Tolong bantu kami untuk memperluas daftar ini.
Dengan Vouch Proxy Anda dapat meminta berbagai scopes
(standar dan khusus) untuk mendapatkan informasi lebih lanjut tentang pengguna atau mendapatkan akses ke API penyedia. Secara internal, Vouch Proxy meluncurkan permintaan ke user_info_url
setelah otentikasi berhasil. claims
yang diperlukan diambil dari respons penyedia dan disimpan dalam cookie VP.
Cookie VP dapat dibagi menjadi beberapa cookie untuk mengakomodasi batas ukuran cookie browser. Tapi jika Anda membutuhkannya, Anda membutuhkannya. Cookie dan header yang besar memerlukan Nginx untuk dikonfigurasi dengan buffer yang lebih besar. Lihat large_client_header_buffers dan proxy_buffer_size untuk informasi selengkapnya.
scopes
dan claims
di Vouch Proxy dengan NginxKonfigurasikan Vouch Proxy untuk Nginx dan IdP Anda seperti biasa (Lihat: Instalasi dan Konfigurasi)
Tetapkan scope
yang diperlukan di bagian oauth
pada vouch-proxy config.yml
(contoh konfigurasi)
atur idtoken: X-Vouch-IdP-IdToken
di bagian headers
config.yml
vouch-proxy
masuk dan panggil titik akhir /validate
di browser modern
periksa header respons untuk header X-Vouch-IdP-IdToken
salin nilai header ke debugger di https://jwt.io/ dan pastikan bahwa klaim yang diperlukan adalah bagian dari jwt
jika tidak, Anda perlu menyesuaikan scopes
di bagian oauth
pada config.yml
Anda atau mengkonfigurasi ulang penyedia oauth Anda
Tetapkan claims
yang diperlukan di bagian header
vouch-proxy config.yml
masuk dan panggil titik akhir /validate
di browser modern
periksa header respons untuk header formulir X-Vouch-IdP-Claims-<ClaimName>
Jika tidak ada, hapus cookie dan data browser cache Anda
? Jika masih belum ada tetapi ada di jwt (khususnya klaim khusus) mungkin ada bug
hapus idtoken: X-Vouch-IdP-IdToken
dari bagian headers
config.yml
vouch-proxy jika Anda tidak membutuhkannya
Gunakan auth_request_set
setelah auth_request
di dalam lokasi yang dilindungi di nginx server.conf
Konsumsi klaim (contoh konfigurasi nginx)
menjalankan buruh pelabuhan -d -hal 9090:9090 --nama jaminan-proxy -v ${PWD}/config:/config quay.io/vouch/vouch-proxy
atau
menjalankan buruh pelabuhan -d -hal 9090:9090 --nama jaminan-proksi -e VOUCH_DOMAINS=domainanda.com -e OAUTH_PROVIDER=google -e OAUTH_CLIENT_ID=1234 -e OAUTH_CLIENT_SECRET=rahasiarahasia -e OAUTH_CALLBACK_URL=https://vouch.domainanda.com/auth quay.io/vouch/vouch-proxy
Pada v0.36.0
proses buruh pelabuhan dalam wadah berjalan sebagai vouch
pengguna dengan UID 999 dan GID 999. Anda mungkin perlu mengatur izin /config/config.yml
dan /config/secret
agar dapat dibaca oleh pengguna ini, atau gunakan docker run --user $UID:$GID ...
atau mungkin buat wadah buruh pelabuhan dari sumber dan gunakan ARG yang tersedia untuk UID dan GID.
Pembuatan kontainer otomatis untuk setiap rilis Vouch Proxy tersedia dari quay.io. Setiap rilis menghasilkan..
wadah biner go minimal yang dibuat dari Dockerfile
quay.io/vouch/vouch-proxy:latest
quay.io/vouch/vouch-proxy:xyz
seperti quay.io/vouch/vouch-proxy:0.28.0
wadah berbasis alpine
yang dibuat dari Dockerfile.alpine
quay.io/vouch/vouch-proxy:alpine-latest
quay.io/vouch/vouch-proxy:alpine-xyz
Gambar arm
Proxy Vouch tersedia di Docker Hub
voucher/vouch-proxy:latest-arm
Jika Anda menggunakan kubernetes dengan nginx-ingress, Anda dapat mengonfigurasi ingress Anda dengan anotasi berikut (catatan mengutip anotasi auth-signin
):
nginx.ingress.kubernetes.io/auth-signin: "https://vouch.domainanda.com/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$ auth_resp_err" nginx.ingress.kubernetes.io/auth-url: https://vouch.domainanda.com/validate nginx.ingress.kubernetes.io/auth-response-headers: Pengguna-X-Vouch nginx.ingress.kubernetes.io/auth-snippet: | # nilai kembalian ini digunakan oleh panggilan @error401 auth_request_set $auth_resp_jwt $upstream_http_x_vouch_jwt; auth_request_set $auth_resp_err $upstream_http_x_vouch_err; auth_request_set $auth_resp_failcount $upstream_http_x_vouch_failcount; # ketika VP di-host secara eksternal ke k8s, pastikan sertifikat SSL valid untuk menghindari risiko MITM # proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt; # proxy_ssl_session_reuse aktif; #proksi_ssl_verifikasi_kedalaman 2; # proxy_ssl_verify aktif;
Helm Charts dikelola oleh punkle, martina-if dan halkeye dan tersedia di https://github.com/vouch/helm-charts
./do.sh goget ./do.sh membangun ./vouch-proxy
Pada v0.29.0
semua templat, aset statis, dan konfigurasi default di .defaults.yml
dibangun ke dalam biner statis menggunakan arahan go:embed.
Mulai v0.11.0
pemeriksaan tambahan dilakukan untuk mengurangi permukaan serangan pengalihan url.
URL yang diteruskan...
harus dimulai dengan http
atau https
harus memiliki domain yang tumpang tindih dengan domain di daftar vouch.domains
atau vouch.cookie.domain
(jika salah satu dari keduanya dikonfigurasi)
tidak dapat memiliki parameter yang menyertakan URL untuk mencegah serangan rangkaian URL
Titik akhir Vouch Proxy /logout
menerima parameter url
dalam string kueri yang dapat digunakan untuk 302
pengguna ke revocation_endpoint penyedia OAuth asli/IDP/OIDC Anda
https://vouch.oursites.com/logout?url=https://oauth2.googleapis.com/revoke
url ini harus ada dalam file konfigurasi di daftar vouch.post_logout_redirect_uris
# untuk mencegah serangan pengalihan, semua URL yang dialihkan ke /logout harus ditentukan# URL harus tetap diteruskan ke Vouch Proxy sebagai https://vouch.domainanda.com/logout?url=${SALAH SATU URL DI BAWAH}post_logout_redirect_uris : # halaman login aplikasi Anda - https://domainanda.com/login # titik keluar IdP Anda # dari https://accounts.google.com/.well-known/openid-configuration - https://oauth2.googleapis.com/revoke # Anda mungkin terhubung ke IdP Anda - https://myorg.okta.com/oauth2/123serverid/v1/logout?post_logout_redirect_uri=http://myapp.domainanda.com/login
Perhatikan bahwa IdP Anda kemungkinan akan memiliki daftar post_logout_redirect_uri
tersendiri yang terpisah.
sumber daya logout..
Oke
Auth0
Menyelaraskan bintang antara Nginx, Vouch Proxy, dan IdP Anda bisa jadi rumit. Kami ingin membantu Anda memulai dan menjalankannya secepat mungkin. Masalah yang paling sering terjadi adalah..
Periksa kembali apakah Anda menjalankan Vouch Proxy dan aplikasi Anda di domain umum yang dapat berbagi cookie. Misalnya, vouch.yourdomain.com
dan app.yourdomain.com
dapat berbagi cookie di domain .yourdomain.com
. (Ini tidak akan berfungsi jika Anda mencoba menggunakan vouch.yourdomain.org
dan app.yourdomain.net
.)
Anda mungkin perlu secara eksplisit menentukan domain tempat cookie harus disetel. Anda dapat melakukan ini di file konfigurasi dengan mengatur opsi:
jamin: cookie: # paksa domain cookie untuk menyetel domain: domainanda.com
Jika Anda terus mengalami masalah, coba yang berikut ini:
nyalakan vouch.testing: true
. Ini akan memperlambat perulangan.
atur vouch.logLevel: debug
.
header Host:
dalam permintaan http, oauth.callback_url
dan vouch.domains
yang dikonfigurasi semuanya harus selaras sehingga cookie yang membawa JWT dapat ditempatkan dengan benar ke dalam browser dan kemudian dikembalikan pada setiap permintaan
ada gunanya berpikir seperti kue .
cookie diatur ke dalam domain. Jika Anda memiliki siteA.yourdomain.com
dan siteB.yourdomain.com
yang dilindungi oleh Vouch Proxy, Anda ingin cookie Vouch Proxy disetel ke .yourdomain.com
jika Anda mengautentikasi ke vouch.yourdomain.com
cookie tidak akan dapat dilihat oleh dev.anythingelse.com
kecuali Anda menggunakan https, Anda harus menyetel vouch.cookie.secure: false
cookie tersedia untuk semua port domain
silakan lihat masalah yang telah ditutup yang menyebutkan pengalihan
Silakan kirimkan terbitan baru dengan cara berikut..
TLDR:
setel vouch.testing: true
atur vouch.logLevel: debug
melakukan dua perjalanan penuh ./vouch-proxy
menangkap output..
permulaan Wakil Presiden
/validate
/login
- meskipun kesalahannya ada di sini
/auth
/validate
- tangkap semuanya
masukkan semua log dan konfigurasi Anda ke dalam gist
.
./do.sh bug_report
adalah teman Anda
nyalakan vouch.testing: true
dan setel vouch.logLevel: debug
.
gunakan Intisari atau layanan tempel lainnya seperti hasteb.in. JANGAN MASUKKAN LOG DAN KONFIGASI ANDA KE MASALAH GITHUB . Menggunakan layanan tempel itu penting karena akan menjaga spasi dan akan memberikan nomor baris dan format. Kami berburu jarum di tumpukan jerami dengan pengaturan dengan beberapa bagian yang bergerak, fitur ini sangat membantu. Layanan tempel menghemat waktu Anda dan waktu kami serta membantu kami membantu Anda dengan cepat. Kemungkinan besar Anda akan mendapatkan dukungan baik dari kami pada waktu yang tepat dengan mengikuti saran ini.
jalankan ./do.sh bug_report secretdomain.com secretpass [anothersecret..]
yang akan membuat versi konfigurasi Anda yang telah disunting dan mencatat penghapusan setiap string tersebut
dan ikuti instruksi di bagian akhir untuk mengedit konfigurasi Nginx Anda
semua itu menjadi intinya
lalu buka terbitan baru di repositori ini
Laporan bug dapat dibuat dari lingkungan buruh pelabuhan menggunakan gambar quay.io/vouch/vouch-proxy:alpine
...
docker run --name vouch_proxy -v $PWD/config:/config -v $PWD/certs:/certs -it --rm --entrypoint /do.sh quay.io/vouch/vouch-proxy:alpine bug_report yourdomain.com anotherdomain.com someothersecret
Kami ingin Anda berkontribusi! Silakan lihat pedoman kontribusi kami untuk detailnya.
OpenResty® adalah platform web lengkap yang mengintegrasikan inti Nginx standar, LuaJIT, banyak pustaka Lua yang ditulis dengan cermat, banyak modul Nginx pihak ketiga berkualitas tinggi, dan sebagian besar dependensi eksternalnya.
Anda dapat mengganti nginx dengan OpenResty dengan cukup mudah.
Dengan OpenResty dan Lua dimungkinkan untuk memberikan otorisasi yang disesuaikan dan tingkat lanjut pada setiap header atau jaminan klaim yang diturunkan.
OpenResty dan konfigurasi untuk berbagai skenario tersedia di direktori contoh.
Bob mengunjungi https://private.oursites.com
proksi terbalik Nginx...
jika /validate
kembali...
tanggapi Bob dengan pengalihan 302 ke https://vouch.oursites.com/login?url=https://private.oursites.com
200 OK maka SUKSES izinkan Bob lewat
401 Tidak Diizinkan kalau begitu
menerima permintaan private.oursites.com dari Bob
menggunakan modul auth_request
yang dikonfigurasi untuk jalur /validate
/validate
dikonfigurasi untuk proxy_pass
permintaan ke layanan otentikasi di https://vouch.oursites.com/validate
Proksi Vouch https://vouch.oursites.com/validate
kembalikan 401 NotAuthorized
ke Nginx (yang meneruskan permintaan untuk login)
mengembalikan 200 OK
ke Nginx, yang akan mengizinkan akses (bob tidak memperhatikan apa pun)
menerima permintaan private.oursites.com dari Bob melalui Nginx proxy_pass
mencari cookie bernama "situs kamiSSO" yang berisi JWT
jika cookie ditemukan, dan JWT valid
jika cookie TIDAK ditemukan, atau JWT TIDAK valid
Bob pertama kali diteruskan sebentar ke https://vouch.oursites.com/login?url=https://private.oursites.com
menghapus cookie bernama "situs kamiSSO" jika ada
menghasilkan nonce dan menyimpannya dalam variabel sesi $STATE
menyimpan url https://private.oursites.com
dari string kueri dalam variabel sesi $requestedURL
tanggapi Bob dengan pengalihan 302 ke formulir Login OAuth Google, termasuk nonce $STATE
Bob masuk ke akun Google-nya menggunakan Oauth
setelah berhasil login
Google merespons Bob dengan pengalihan 302 ke https://vouch.oursites.com/auth?state=$STATE
Bob diteruskan ke https://vouch.oursites.com/auth?state=$STATE
menerbitkan bob JWT dalam bentuk cookie bernama "situs kamiSSO"
ambil variabel sesi $requestedURL
dan 302 redirect bob kembali ke https://private.oursites.com
jika $STATE nonce dari url cocok dengan variabel sesi "state"
membuat permintaan "kaki ketiga" dari Google (server ke server) untuk menukar kode OAuth dengan info pengguna Bob termasuk alamat email [email protected]
jika alamat email cocok dengan domain oursites.com (ya)
Perhatikan bahwa di luar beberapa pengalihan yang tidak berbahaya, Bob hanya melihat https://private.oursites.com
dan layar Login Google di browsernya. Meskipun Vouch berinteraksi dengan browser Bob beberapa kali, itu hanya untuk menyetel cookie, dan jika pengalihan 302 berfungsi dengan baik, Bob akan login dengan cepat.
Setelah JWT disetel, Bob akan diberi otorisasi untuk semua situs lain yang dikonfigurasi untuk menggunakan https://vouch.oursites.com/validate
dari modul auth_request
Nginx.
Saat berikutnya Bob diteruskan ke Google untuk login, karena dia telah mengotorisasi aplikasi Vouch Proxy OAuth, Google segera meneruskannya kembali dan menyetel cookie dan mengirimnya dalam perjalanan yang menyenangkan. Di beberapa browser seperti Chrome, Bob mungkin tidak menyadari bahwa dia login menggunakan Vouch Proxy.