โซลูชัน SSO สำหรับ Nginx โดยใช้โมดูล auth_request Vouch Proxy สามารถปกป้องเว็บไซต์ทั้งหมดของคุณได้ในคราวเดียว
Vouch Proxy รองรับผู้ให้บริการเข้าสู่ระบบ OAuth และ OIDC จำนวนมาก และสามารถบังคับใช้การรับรองความถูกต้องเพื่อ...
GitHub
GitHub องค์กร
IndieAuth
ออคต้า
หย่อน
ADFS
โฆษณา Azure
อาลีบาบา/อาลียุน iDaas
AWS Cognito
ชัก
ความไม่ลงรอยกัน
SecureAuth
กีเทีย
เสื้อคลุมกุญแจ
ไลบรารีเซิร์ฟเวอร์ OAuth2 สำหรับ PHP
ผู้ช่วยหน้าแรก
OpenStax
โอรี่ ไฮดรา
เน็กซ์คลาวด์
ผู้ให้บริการ OpenID Connect (OIDC) อื่นๆ ส่วนใหญ่
โปรดแจ้งให้เราทราบเมื่อคุณได้ปรับใช้ Vouch Proxy กับ IdP หรือไลบรารีที่คุณต้องการ เพื่อให้เราสามารถอัปเดตรายการได้
หาก Vouch ทำงานบนโฮสต์เดียวกันกับพร็อกซีย้อนกลับ Nginx เวลาตอบสนองจากจุดสิ้นสุด /validate
ไปยัง Nginx ควร น้อยกว่า 1ms
Vouch Proxy ทำหน้าที่อะไร...
การติดตั้งและการกำหนดค่า
Vouch Proxy "อยู่ในเส้นทาง"
การกำหนดค่า Nginx เพิ่มเติม
การกำหนดค่าผ่านตัวแปรสภาพแวดล้อม
เคล็ดลับ เทคนิค และการกำหนดค่าขั้นสูง
ขอบเขตและการเรียกร้อง
กำลังเรียกใช้จากนักเทียบท่า
ทางเข้า Kubernetes Nginx
รวบรวมจากแหล่งที่มาและเรียกใช้ไบนารี
/login และ /logout การเปลี่ยนเส้นทางปลายทาง
การแก้ไขปัญหา การสนับสนุน และคำขอคุณสมบัติ (อ่านสิ่งนี้ก่อนที่จะส่งปัญหาที่ GitHub)
ฉันได้รับการวนซ้ำการเปลี่ยนเส้นทางไม่สิ้นสุดซึ่งส่งฉันกลับไปที่ IdP ของฉัน (Google/Okta/GitHub/...)
โอเค ฉันตรวจสอบปัญหาแล้วและลองบางอย่างกับการกำหนดค่าของฉันแล้ว แต่ก็ยังใช้งานไม่ได้
การมีส่วนร่วมในการ Vouch Proxy
การอนุญาตขั้นสูงโดยใช้ OpenResty
ขั้นตอนการเข้าสู่ระบบและการตรวจสอบสิทธิ์โดยใช้ Google Oauth
Vouch Proxy (VP) บังคับให้ผู้เยี่ยมชมเข้าสู่ระบบและรับรองความถูกต้องด้วย IdP (เช่นหนึ่งในบริการที่ระบุไว้ข้างต้น) ก่อนที่จะอนุญาตให้พวกเขาเข้าถึงเว็บไซต์
VP ยังสามารถใช้เป็นโซลูชันการลงชื่อเพียงครั้งเดียว (SSO) เพื่อปกป้องแอปพลิเคชันเว็บทั้งหมดในโดเมนเดียวกัน
หลังจากที่ผู้เยี่ยมชมเข้าสู่ระบบ Vouch Proxy จะอนุญาตให้เข้าถึงเว็บไซต์ที่ได้รับการป้องกันเป็นเวลาหลายชั่วโมง ทุกคำขอได้รับการตรวจสอบโดย VP เพื่อให้แน่ใจว่าถูกต้อง
VP สามารถส่งอีเมล ชื่อ และข้อมูลอื่น ๆ ของผู้เยี่ยมชมที่ IdP ให้ (รวมถึงโทเค็นการเข้าถึง) ไปยังเว็บแอปพลิเคชันเป็นส่วนหัว HTTP VP สามารถใช้เพื่อแทนที่การจัดการผู้ใช้แอปพลิเคชันทั้งหมด
Vouch Proxy อาศัยความสามารถในการแบ่งปันคุกกี้ระหว่างเซิร์ฟเวอร์ Vouch Proxy และแอปพลิเคชันที่ได้รับการปกป้อง โดยทั่วไปจะดำเนินการได้โดยการเรียกใช้ Vouch บนโดเมนย่อย เช่น vouch.yourdomain.com
โดยมีแอปที่ทำงานที่ app1.yourdomain.com
และ app2.yourdomain.com
โดเมนที่ได้รับการป้องกันคือ .yourdomain.com
และต้องตั้งค่าคุกกี้ Vouch Proxy ในโดเมนนี้โดยการตั้งค่า vouch.domains ให้รวม yourdomain.com
หรือบางครั้งโดยการตั้งค่า vouch.cookie.domain เป็น yourdomain.com
cp ./config/config.yml_example_$OAUTH_PROVIDER ./config/config.yml
สร้างข้อมูลประจำตัว OAuth สำหรับ Vouch Proxy ที่ google หรือ github เป็นต้น
ต้องแน่ใจว่าได้กำหนดทิศทาง URL การติดต่อกลับไปยังปลายทาง Vouch Proxy /auth
กำหนดค่า Nginx...
การกำหนดค่า Nginx ต่อไปนี้ถือว่า ..
Nginx, vouch.yourdomain.com
และ protectedapp.yourdomain.com
ทำงานบนเซิร์ฟเวอร์เดียวกัน
ทั้งสองโดเมนทำหน้าที่เป็น https
และมีใบรับรองที่ถูกต้อง (หากไม่ใช่ ให้เปลี่ยนเป็น listen 80
และตั้งค่า vouch.cookie.secure เป็น false
)
เซิร์ฟเวอร์ { ฟัง 443 ssl http2; server_name protectedapp.yourdomain.com; รูต /var/www/html/; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # ส่งคำขอทั้งหมดไปยังจุดสิ้นสุด `/ validate` เพื่อขออนุมัติ auth_request /validate; location = /validate { # ส่งต่อคำขอ /validate ไปที่ Vouch Proxy proxy_pass http://127.0.0.1:9090/validate; # ต้องแน่ใจว่าได้ส่งส่วนหัวโฮสต์ดั้งเดิม proxy_set_header Host $http_host; # Vouch Proxy ดำเนินการเฉพาะกับส่วนหัวคำขอ proxy_pass_request_body off เท่านั้น proxy_set_header ความยาวเนื้อหา ""; # เลือกที่จะเพิ่ม X-Vouch-User ตามที่ส่งคืนโดย Vouch Proxy พร้อมกับคำขอ auth_request_set $auth_resp_x_vouch_user $upstream_http_x_vouch_user; # เลือกที่จะเพิ่ม X-Vouch-IdP-Claims-* การอ้างสิทธิ์แบบกำหนดเองที่คุณกำลังติดตาม # 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; # เลือกที่จะเพิ่ม X-Vouch-IdP-AccessToken หรือ 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; # ค่าส่งคืนเหล่านี้ถูกใช้โดยการโทร @ 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 สามารถทำงานด้านหลังพร็อกซีย้อนกลับ Nginx เดียวกัน # อาจจำเป็นต้องปฏิบัติตามการตั้งชื่อเซิร์ฟเวอร์ "อัปสตรีม" # proxy_pass http://vouch.yourdomain.com/validate; # โฮสต์ proxy_set_header $http_host; } # หากตรวจสอบความถูกต้องส่งคืน `401 ไม่ได้รับอนุญาต` ให้ส่งต่อคำขอไปที่ error401block error_page 401 = @ error401; location @ error401 { # เปลี่ยนเส้นทางไปยัง Vouch Proxy เพื่อเข้าสู่ระบบ return 302 https://vouch.yourdomain.com/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$ auth_resp_err; # โดยปกติคุณ *ต้องการ* เปลี่ยนเส้นทางไปยัง Vouch ที่ทำงานอยู่เบื้องหลังการกำหนดค่า Nginx เดียวกันที่ได้รับการป้องกันโดย https # แต่ในการเริ่มต้น คุณสามารถส่งต่อผู้ใช้ไปยังพอร์ตที่รับรองกำลังทำงานอยู่บน # return 302 http://vouch.yourdomain.com:9090/login?url=$scheme://$http_host$request_uri&vouch-failcount=$auth_resp_failcount&X-Vouch-Token=$auth_resp_jwt&error=$auth_resp_err; } ตำแหน่ง / { # ส่งต่อคำขอที่ได้รับอนุญาตไปยังบริการของคุณ protectedapp.yourdomain.com proxy_pass http://127.0.0.1:8080; # คุณอาจต้องตั้งค่าตัวแปรเหล่านี้ในบล็อกนี้ตาม 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; # ตั้งค่าส่วนหัวของผู้ใช้ (โดยปกติจะเป็นอีเมล) proxy_set_header X-Vouch-User $auth_resp_x_vouch_user; # เลือกที่จะผ่านการอ้างสิทธิ์แบบกำหนดเองใด ๆ ที่คุณกำลังติดตาม # proxy_set_header X-Vouch-IdP-Claims-Groups $auth_resp_x_vouch_idp_claims_groups; # proxy_set_header X-Vouch-IdP-การอ้างสิทธิ์-Given_Name $auth_resp_x_vouch_idp_claims_given_name; # เลือกที่จะส่ง accesstoken หรือ 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; - -
หากมีการกำหนดค่า Vouch ไว้ด้านหลัง nginx Reverseproxy เดียวกัน (บางทีเพื่อให้คุณสามารถกำหนดค่า SSL ได้) ต้องแน่ใจว่าได้ส่งส่วนหัว Host
อย่างถูกต้อง ไม่เช่นนั้นคุกกี้ JWT จะไม่สามารถตั้งค่าลงในโดเมนได้
เซิร์ฟเวอร์ { ฟัง 443 ssl http2; server_name vouch.yourdomain.com; ssl_certificate /etc/letsencrypt/live/vouch.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/vouch.yourdomain.com/privkey.pem; ตำแหน่ง / { proxy_pass http://127.0.0.1:9090; # ต้องแน่ใจว่าได้ส่งส่วนหัวโฮสต์ดั้งเดิม proxy_set_header Host $http_host; - -
ตั้งแต่ v0.33.0
Vouch Proxy สามารถให้บริการภายในตำแหน่ง Nginx (เส้นทาง) ได้โดยการกำหนดค่า vouch.document_root: /vp_in_a_path
เพื่อหลีกเลี่ยงความจำเป็นในการตั้งค่าโดเมนแยกต่างหากสำหรับ Vouch Proxy เช่น vouch.yourdomain.com
ตัวอย่างเช่น การเข้าสู่ระบบ VP จะให้บริการจาก https://protectedapp.yourdomain.com/vp_in_a_path/login
เซิร์ฟเวอร์ { ฟัง 443 ssl http2; server_name protectedapp.yourdomain.com; ssl_certificate /etc/letsencrypt/live/protectedapp.yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/protectedapp.yourdomain.com/privkey.pem; # ตำแหน่งนี้ให้บริการจุดสิ้นสุด Vouch Proxy ทั้งหมดเป็น /vp_in_a_path/$uri # รวมถึง /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, ฯลฯ ตำแหน่ง /vp_in_a_path { proxy_pass http://127.0.0.1:9090; #ต้องไม่! มีเครื่องหมายทับที่ส่วนท้ายของ proxy_set_header Host $http_host; proxy_pass_request_body ปิด; proxy_set_header ความยาวเนื้อหา ""; # ค่าส่งคืนเหล่านี้ถูกใช้โดยการโทร @ 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; } # ถ้า /vp_in_a_path/validate ส่งคืน `401 ไม่ได้รับอนุญาต` ให้ส่งต่อคำขอไปที่ error401block error_page 401 = @error401; ตำแหน่ง @ error401 { # เปลี่ยนเส้นทางไปยัง Vouch Proxy สำหรับการเข้าสู่ระบบ ส่งคืน 302 https://protectedapp.yourdomain.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; } ตำแหน่ง / { auth_request /vp_in_a_path/validate; พร็อกซี_พาส http://127.0.0.1:8080; # ดูการกำหนดค่า Nginx ด้านบนสำหรับส่วนหัวเพิ่มเติมซึ่งสามารถตั้งค่าได้จาก Vouch Proxy - -
สามารถดูการกำหนดค่า Nginx เพิ่มเติมได้ในไดเร็กทอรีตัวอย่าง
นี่คือการตั้งค่าขั้นต่ำโดยใช้ OAuth ของ Google...
VOUCH_DOMAINS=โดเมนของคุณ.com OAUTH_PROVIDER=google OAUTH_CLIENT_ID=1234 OAUTH_CLIENT_SECRET=ความลับ OAUTH_CALLBACK_URL=https://vouch.yourdomain.com/auth ./vouch-proxy
ชื่อตัวแปรสภาพแวดล้อมได้รับการบันทึกไว้ใน config/config.yml_example
รายการทั้งหมดที่มีหลายค่าจะต้องคั่นด้วยเครื่องหมายจุลภาค: VOUCH_DOMAINS="yourdomain.com,yourotherdomain.com"
ตัวแปร VOUCH_CONFIG
สามารถใช้เพื่อตั้งค่าตำแหน่งสำรองสำหรับไฟล์คอนฟิกูเรชัน VOUCH_ROOT
สามารถใช้เพื่อตั้งค่าไดเร็กทอรีรากสำรองสำหรับ Vouch Proxy เพื่อค้นหาไฟล์สนับสนุน
รายการการกำหนดค่า Vouch Proxy ทั้งหมดได้รับการบันทึกไว้ใน config/config.yml_example
การแคช Vouch Proxy /validate
การตอบสนองใน Nginx
การจัดการคำขอ OPTIONS
เมื่อปกป้อง API ด้วย Vouch Proxy
การตรวจสอบโดยทีม GitHub หรือ GitHub Org
ใช้งาน VP บน Raspberry Pi โดยใช้อิมเมจ Docker ที่ใช้ ARM
ทางเข้าของสถาปัตยกรรม Kubernetes
ตั้งค่า HTTP_PROXY
เพื่อส่งต่อคำขอ Vouch Proxy IdP ผ่านพร็อกซีเซิร์ฟเวอร์ขาออก
Reverse Proxy สำหรับบริการ Google Cloud Run
เปิดใช้งาน TLS ดั้งเดิมใน Vouch Proxy
รองรับ FreeBSD
systemd
การเริ่มต้นของ Vouch Proxy
การใช้ Node.js แทน Nginx เพื่อกำหนดเส้นทางคำขอ
การพัฒนาแอปหน้าเดียว (SPA) ในขณะที่ใช้งาน API ที่มีการป้องกันของ VP
รวม Vouch Proxy เข้ากับแอปพลิเคชันฝั่งเซิร์ฟเวอร์สำหรับ User Authn และ Authz
กรองตามที่อยู่ IP ก่อนการตรวจสอบ VP โดยใช้ satisfy any;
โปรดช่วยเราขยายรายการนี้
ด้วย Vouch Proxy คุณสามารถขอ scopes
ต่างๆ (มาตรฐานและกำหนดเอง) เพื่อรับข้อมูลเพิ่มเติมเกี่ยวกับผู้ใช้หรือเข้าถึง API ของผู้ให้บริการ ภายใน Vouch Proxy จะเปิดตัวคำขอไปยัง user_info_url
หลังจากการตรวจสอบสิทธิ์สำเร็จ claims
ที่จำเป็นจะถูกดึงมาจากคำตอบของผู้ให้บริการและจัดเก็บไว้ในคุกกี้ VP
คุกกี้ VP อาจแบ่งออกเป็นหลายคุกกี้เพื่อรองรับขีดจำกัดขนาดคุกกี้ของเบราว์เซอร์ แต่ถ้าคุณต้องการมันคุณก็จำเป็นต้องมี คุกกี้และส่วนหัวขนาดใหญ่จำเป็นต้องกำหนดค่า Nginx ด้วยบัฟเฟอร์ที่ใหญ่กว่า ดู large_client_header_buffers และ proxy_buffer_size สำหรับข้อมูลเพิ่มเติม
scopes
และ claims
ใน Vouch Proxy ด้วย Nginxกำหนดค่า Vouch Proxy สำหรับ Nginx และ IdP ของคุณตามปกติ (ดู: การติดตั้งและการกำหนดค่า)
ตั้งค่า scope
ที่จำเป็นในส่วน oauth
ของ vouch-proxy config.yml
(ตัวอย่างการกำหนดค่า)
ตั้งค่า idtoken: X-Vouch-IdP-IdToken
ในส่วน headers
ของ config.yml
ของ vouch-proxy
เข้าสู่ระบบและเรียกจุดสิ้นสุด /validate
ในเบราว์เซอร์สมัยใหม่
ตรวจสอบส่วนหัวการตอบกลับสำหรับส่วนหัว X-Vouch-IdP-IdToken
คัดลอกค่าของส่วนหัวลงในดีบักเกอร์ที่ https://jwt.io/ และตรวจสอบให้แน่ใจว่าการอ้างสิทธิ์ที่จำเป็นเป็นส่วนหนึ่งของ jwt
หากไม่เป็นเช่นนั้น คุณจะต้องปรับ scopes
ในส่วน oauth
ของ config.yml
หรือกำหนดค่าผู้ให้บริการ oauth ใหม่
ตั้งค่า claims
ที่จำเป็นในส่วน header
ของ vouch-proxy config.yml
เข้าสู่ระบบและเรียกจุดสิ้นสุด /validate
ในเบราว์เซอร์สมัยใหม่
ตรวจสอบส่วนหัวการตอบกลับสำหรับส่วนหัวของแบบฟอร์ม X-Vouch-IdP-Claims-<ClaimName>
หากไม่มีให้ล้างคุกกี้และข้อมูลเบราว์เซอร์ที่แคชไว้
- หากยังไม่มี แต่มีอยู่ใน jwt (โดยเฉพาะการอ้างสิทธิ์แบบกำหนดเอง) อาจมีข้อบกพร่อง
ลบ idtoken: X-Vouch-IdP-IdToken
ออกจากส่วน headers
ของ config.yml
ของ vouch-proxy หากคุณไม่ต้องการ
ใช้ auth_request_set
หลัง auth_request
ภายในตำแหน่งที่ได้รับการป้องกันใน nginx server.conf
ใช้การอ้างสิทธิ์ (ตัวอย่างการกำหนดค่า nginx)
นักเทียบท่ารัน -d -หน้า 9090:9090 --ชื่อรับรอง-พร็อกซี่ -v ${PWD}/config:/config quay.io/vouch/vouch-proxy
หรือ
นักเทียบท่ารัน -d -หน้า 9090:9090 --ชื่อรับรอง-พร็อกซี -e VOUCH_DOMAINS=โดเมนของคุณ.com -e OAUTH_PROVIDER=google -e OAUTH_CLIENT_ID=1234 -e OAUTH_CLIENT_SECRET=ความลับ ความลับ -e OAUTH_CALLBACK_URL=https://vouch.yourdomain.com/auth quay.io/vouch/vouch-proxy
ตั้งแต่ v0.36.0
กระบวนการนักเทียบท่าในคอนเทนเนอร์จะทำงานโดยผู้ใช้ vouch
ด้วย UID 999 และ GID 999 คุณอาจต้องตั้งค่าการอนุญาตของ /config/config.yml
และ /config/secret
เพื่อให้สอดคล้องกับที่ผู้ใช้รายนี้สามารถอ่านได้ หรือใช้ docker run --user $UID:$GID ...
หรืออาจสร้างคอนเทนเนอร์นักเทียบท่าจากแหล่งที่มาและใช้ ARG ที่มีอยู่สำหรับ UID และ GID
การสร้างคอนเทนเนอร์อัตโนมัติสำหรับ Vouch Proxy แต่ละรุ่นมีให้ใช้งานจาก quay.io แต่ละรุ่นผลิต..
คอนเทนเนอร์ไบนารี่ go ขั้นต่ำที่สร้างจาก Dockerfile
quay.io/vouch/vouch-proxy:latest
quay.io/vouch/vouch-proxy:xyz
เช่น quay.io/vouch/vouch-proxy:0.28.0
คอนเทนเนอร์แบบ alpine
ที่สร้างจาก Dockerfile.alpine
quay.io/vouch/vouch-proxy:alpine-latest
quay.io/vouch/vouch-proxy:alpine-xyz
อิมเมจ Vouch Proxy arm
มีอยู่ใน Docker Hub
voucher/vouch-proxy:latest-arm
หากคุณใช้ kubernetes กับ nginx-ingress คุณสามารถกำหนดค่าทางเข้าของคุณด้วยคำอธิบายประกอบต่อไปนี้ (หมายเหตุที่อ้างถึงคำอธิบาย auth-signin
):
nginx.ingress.kubernetes.io/auth-signin: "https://vouch.yourdomain.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.yourdomain.com/validate nginx.ingress.kubernetes.io/auth-response-headers: ผู้ใช้ X-Vouch nginx.ingress.kubernetes.io/auth-snippet: | # ค่าที่ส่งคืนเหล่านี้ถูกใช้โดยการเรียก @ 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; # เมื่อ VP ถูกโฮสต์ภายนอกไปยัง k8s ตรวจสอบให้แน่ใจว่าใบรับรอง SSL นั้นถูกต้องเพื่อหลีกเลี่ยงความเสี่ยง MITM # proxy_ssl_trusted_certificate /etc/ssl/certs/ca-certificates.crt; # proxy_ssl_session_reuse บน; # พร็อกซี_ssl_verify_deep 2; # proxy_ssl_verify บน;
แผนภูมิ Helm ได้รับการดูแลโดย punkle, martina-if และ halkeye และมีอยู่ที่ https://github.com/vouch/helm-charts
./do.sh goget ./do.sh สร้าง ./vouch-proxy
ตั้งแต่ v0.29.0
เป็นต้นไป เทมเพลต สินทรัพย์คงที่ และค่าเริ่มต้นของการกำหนดค่าใน .defaults.yml
ทั้งหมดถูกสร้างขึ้นในไบนารี่แบบคงที่โดยใช้คำสั่ง go:embed
ใน v0.11.0
มีการตรวจสอบเพิ่มเติมเพื่อลดพื้นที่การโจมตีของการเปลี่ยนเส้นทาง URL
URL ที่ส่งผ่าน...
ต้องขึ้นต้นด้วย http
หรือ https
ต้องมีโดเมนซ้อนทับกับโดเมนในรายการ vouch.domains
หรือ vouch.cookie.domain
(หากกำหนดค่าอย่างใดอย่างหนึ่ง)
ไม่สามารถมีพารามิเตอร์ที่มี URL เพื่อป้องกันการโจมตีการเชื่อมโยง URL
จุดสิ้นสุด Vouch Proxy /logout
ยอมรับพารามิเตอร์ url
ในสตริงการสืบค้นซึ่งสามารถใช้เพื่อ 302
เปลี่ยนเส้นทางผู้ใช้ไปยังผู้ให้บริการ OAuth ดั้งเดิมของคุณ / revocation_endpoint ของผู้ให้บริการ IDP / OIDC
https://vouch.oursites.com/logout?url=https://oauth2.googleapis.com/revoid
URL นี้จะต้องมีอยู่ในไฟล์การกำหนดค่าในรายการ vouch.post_logout_redirect_uris
# เพื่อป้องกันการโจมตีการเปลี่ยนเส้นทาง ต้องระบุ URL ที่เปลี่ยนเส้นทางทั้งหมดไปที่ /logout# URL จะต้องยังคงถูกส่งผ่านไปยัง Vouch Proxy เป็น https://vouch.yourdomain.com/logout?url=${หนึ่งใน URL ด้านล่าง}post_logout_redirect_uris : # หน้าเข้าสู่ระบบแอปของคุณ - https://yourdomain.com/login # ออกจากระบบ IdP ของคุณ # จาก https://accounts.google.com/.well-known/openid-configuration - https://oauth2.googleapis.com/revoid # คุณอาจเชื่อมต่อแบบเดซี่กับ IdP ของคุณ - https://myorg.okta.com/oauth2/123serverid/v1/logout?post_logout_redirect_uri=http://myapp.yourdomain.com/login
โปรดทราบว่า IdP ของคุณมีแนวโน้มที่จะมีรายการ post_logout_redirect_uri
แยกต่างหาก
แหล่งข้อมูลการออกจากระบบ..
ออคต้า
รับรองความถูกต้อง0
การให้ดาวเพื่อจัดเรียงระหว่าง Nginx, Vouch Proxy และ IdP ของคุณอาจเป็นเรื่องยุ่งยาก เราต้องการช่วยให้คุณเริ่มต้นใช้งานได้โดยเร็วที่สุด ปัญหาที่พบบ่อยที่สุดคือ..
ตรวจสอบอีกครั้งว่าคุณใช้งาน Vouch Proxy และแอปของคุณบนโดเมนทั่วไปที่สามารถแชร์คุกกี้ได้ ตัวอย่างเช่น vouch.yourdomain.com
และ app.yourdomain.com
สามารถแชร์คุกกี้บนโดเมน . .yourdomain.com
(จะไม่ทำงานหากคุณพยายามใช้ vouch.yourdomain.org
และ app.yourdomain.net
)
คุณอาจต้องกำหนดโดเมนอย่างชัดเจนว่าควรตั้งค่าคุกกี้ คุณสามารถทำได้ในไฟล์ปรับแต่งโดยตั้งค่าตัวเลือก:
รับรอง: คุกกี้: # บังคับให้โดเมนของคุกกี้ตั้งค่าโดเมน: yourdomain.com
หากคุณยังคงพบปัญหา ให้ลองทำดังนี้:
เปิด vouch.testing: true
นี่จะทำให้การวนซ้ำช้าลง
ตั้งค่า vouch.logLevel: debug
Host:
ส่วนหัวในคำขอ http, oauth.callback_url
และ vouch.domains
ที่กำหนดค่าไว้ทั้งหมดจะต้องสอดคล้องกันเพื่อให้สามารถวางคุกกี้ที่มี JWT ลงในเบราว์เซอร์ได้อย่างถูกต้องแล้วส่งคืนในแต่ละคำขอ
มันช่วย คิดเหมือนคุกกี้
คุกกี้ถูกตั้งค่าไว้ในโดเมน หากคุณมี siteA.yourdomain.com
และ siteB.yourdomain.com
ป้องกันโดย Vouch Proxy คุณต้องการให้คุกกี้ Vouch Proxy ถูกตั้งค่าเป็น .yourdomain.com
หากคุณตรวจสอบสิทธิ์ vouch.yourdomain.com
dev.anythingelse.com
จะไม่สามารถมองเห็นคุกกี้ได้
ยกเว้นกรณีที่คุณใช้ https คุณควรตั้งค่า vouch.cookie.secure: false
คุกกี้ พร้อม ใช้งานสำหรับทุกพอร์ตของโดเมน
โปรดดูปัญหาที่ถูกปิดซึ่งกล่าวถึงการเปลี่ยนเส้นทาง
กรุณาส่งฉบับใหม่ดังต่อไปนี้..
TLDR:
ตั้งค่า vouch.testing: true
ตั้งค่า vouch.logLevel: debug
ดำเนินการเดินทางสองรอบเต็มของ ./vouch-proxy
เพื่อจับเอาต์พุต ..
รองประธานฝ่ายสตาร์ทอัพ
/validate
/login
- แม้ว่าข้อผิดพลาดจะอยู่ที่นี่ก็ตาม
/auth
/validate
- บันทึกทุกอย่าง
ใส่บันทึกทั้งหมดของคุณและกำหนดค่าใน gist
./do.sh bug_report
คือเพื่อนของคุณ
เปิด vouch.testing: true
และตั้งค่า vouch.logLevel: debug
ใช้ส่วนสำคัญหรือ บริการวาง อื่น ๆ เช่น hasteb.in อย่าใส่บันทึกของคุณและกำหนดค่าลงในปัญหา GitHub การใช้บริการวางเป็นสิ่งสำคัญเนื่องจากจะรักษาระยะห่างและจะให้หมายเลขบรรทัดและการจัดรูปแบบ เรากำลังตามล่าหาเข็มในกองหญ้าที่มีชิ้นส่วนที่เคลื่อนไหวได้หลายชิ้น คุณสมบัติเหล่านี้ช่วยได้มาก บริการวางช่วยประหยัดเวลาและเวลาของเราและช่วยให้เราช่วยเหลือคุณได้อย่างรวดเร็ว คุณมีแนวโน้มมากขึ้นที่จะได้รับการสนับสนุนที่ดีจากเราในเวลาที่เหมาะสมโดยทำตามคำแนะนำนี้
run ./do.sh bug_report secretdomain.com secretpass [anothersecret..]
ซึ่งจะสร้างเวอร์ชันที่แก้ไขแล้วของการกำหนดค่าและบันทึกของคุณ โดยลบแต่ละสตริงเหล่านั้นออก
และทำตามคำแนะนำในตอนท้ายเพื่อแก้ไขการกำหนดค่า Nginx ของคุณ
ทั้งหมดนี้เป็นส่วนสำคัญ
จากนั้นเปิดประเด็นใหม่ในพื้นที่เก็บข้อมูลนี้
สามารถสร้างรายงานข้อผิดพลาดได้จากสภาพแวดล้อมนักเทียบท่าโดยใช้อิมเมจ 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
เราอยากให้คุณมีส่วนร่วม! โปรดดูหลักเกณฑ์การสนับสนุนของเราสำหรับรายละเอียด
OpenResty® เป็นแพลตฟอร์มเว็บเต็มรูปแบบที่รวมแกน Nginx มาตรฐาน, LuaJIT, ไลบรารี Lua ที่เขียนอย่างระมัดระวังจำนวนมาก, โมดูล Nginx บุคคลที่สามคุณภาพสูงจำนวนมาก และการพึ่งพาภายนอกส่วนใหญ่
คุณสามารถแทนที่ nginx ด้วย OpenResty ได้อย่างง่ายดาย
ด้วย OpenResty และ Lua คุณสามารถให้การอนุญาตที่กำหนดเองและขั้นสูงในส่วนหัวหรือเอกสารรับรองการเรียกร้องที่ส่งผ่านลงมาได้
OpenResty และการกำหนดค่าสำหรับสถานการณ์ต่างๆ มีอยู่ในไดเร็กทอรีตัวอย่าง
บ๊อบเข้าชม https://private.oursites.com
พร็อกซีย้อนกลับ Nginx...
ถ้า /validate
ส่งคืน...
ตอบกลับ Bob ด้วยการเปลี่ยนเส้นทาง 302 ไปที่ https://vouch.oursites.com/login?url=https://private.oursites.com
200 โอเค สำเร็จ ปล่อยให้ Bob ผ่านไปได้
401 ไม่ได้รับอนุญาตแล้ว
ได้รับคำขอ private.oursites.com จาก Bob
ใช้โมดูล auth_request
ที่กำหนดค่าไว้สำหรับเส้นทาง /validate
/validate
ได้รับการกำหนดค่าให้ส่งคำขอ proxy_pass
ไปยังบริการตรวจสอบความถูกต้องที่ https://vouch.oursites.com/validate
หนังสือมอบฉันทะ https://vouch.oursites.com/validate
ส่งคืน 401 NotAuthorized
ไปยัง Nginx (ซึ่งส่งต่อคำขอเพื่อเข้าสู่ระบบ)
ส่งคืน 200 OK
ไปที่ Nginx ซึ่งจะอนุญาตการเข้าถึง (bob ไม่เห็นอะไรเลย)
รับคำขอ private.oursites.com จาก Bob ผ่าน Nginx proxy_pass
ค้นหาคุกกี้ชื่อ "oursitesSSO" ที่มี JWT
หากพบคุกกี้และ JWT นั้นถูกต้อง
หากไม่พบคุกกี้ หรือ JWT ไม่ถูกต้อง
Bob ได้รับการส่งต่อสั้น ๆ ไปที่ https://vouch.oursites.com/login?url=https://private.oursites.com
ล้างคุกกี้ชื่อ "oursitesSSO" หากมีอยู่
สร้าง nonce และเก็บไว้ในตัวแปรเซสชัน $STATE
เก็บ url https://private.oursites.com
จากสตริงการสืบค้นในตัวแปรเซสชัน $requestedURL
ตอบกลับ Bob ด้วยการเปลี่ยนเส้นทาง 302 ไปยังแบบฟอร์มเข้าสู่ระบบ OAuth ของ Google รวมถึง $STATE
nonce
Bob ลงชื่อเข้าใช้บัญชี Google ของเขาโดยใช้ Oauth
หลังจากเข้าสู่ระบบสำเร็จ
Google ตอบกลับ Bob ด้วยการเปลี่ยนเส้นทาง 302 ไปยัง https://vouch.oursites.com/auth?state=$STATE
Bob ได้รับการส่งต่อไปยัง https://vouch.oursites.com/auth?state=$STATE
ออก Bob JWT ในรูปแบบของคุกกี้ชื่อ "oursitesSSO"
ดึงตัวแปรเซสชัน $requestedURL
และ 302 เปลี่ยนเส้นทางบ๊อบกลับไปที่ https://private.oursites.com
หาก $STATE nonce จาก url ตรงกับตัวแปรเซสชัน "state"
ส่งคำขอ "ขาที่สาม" ของ Google (เซิร์ฟเวอร์ถึงเซิร์ฟเวอร์) เพื่อแลกเปลี่ยนรหัส OAuth สำหรับข้อมูลผู้ใช้ของ Bob รวมถึงที่อยู่อีเมล [email protected]
หากที่อยู่อีเมลตรงกับโดเมน oursites.com (เป็นเช่นนั้น)
โปรดทราบว่า นอกเหนือจากการเปลี่ยนเส้นทางที่ไม่เป็นอันตราย Bob ยังเห็นเฉพาะ https://private.oursites.com
และหน้าจอเข้าสู่ระบบ Google ในเบราว์เซอร์ของเขาเท่านั้น แม้ว่า Vouch จะโต้ตอบกับเบราว์เซอร์ของ Bob หลายครั้ง แต่ก็เป็นเพียงการตั้งค่าคุกกี้ และหากการเปลี่ยนเส้นทาง 302 ทำงานอย่างถูกต้อง Bob จะเข้าสู่ระบบอย่างรวดเร็ว
เมื่อตั้งค่า JWT แล้ว Bob จะได้รับอนุญาตสำหรับไซต์อื่นทั้งหมดที่ได้รับการกำหนดค่าให้ใช้ https://vouch.oursites.com/validate
จากโมดูล auth_request
Nginx
ครั้งถัดไปที่ Bob ถูกส่งต่อไปยัง google เพื่อเข้าสู่ระบบ เนื่องจากเขาได้อนุญาตแอป Vouch Proxy OAuth แล้ว Google จึงส่งต่อเขากลับทันทีและตั้งค่าคุกกี้ และส่งเขาไปอย่างสนุกสนาน ในเบราว์เซอร์บางตัว เช่น Chrome Bob อาจไม่สังเกตเห็นด้วยซ้ำว่าเขาเข้าสู่ระบบโดยใช้ Vouch Proxy