์ฐํฉ ์ธ์ฆ ์ง์
Open WebUI๋ ์ฌ๋ฌ ํํ์ ์ฐํฉ ์ธ์ฆ์ ์ง์ํฉ๋๋ค:
- OAuth2
- Microsoft
- Github
- OIDC
- ์ ๋ขฐํ ์ ์๋ ํค๋
OAuthโ
OAuth์ ๋ํ ์ ์ญ ๊ตฌ์ฑ ์ต์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
ENABLE_OAUTH_SIGNUP
-true
๋ก ์ค์ ํ๋ฉด OAuth๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธํ ๋ ๊ณ์ ์ ์์ฑํ ์ ์์ต๋๋ค.ENABLE_SIGNUP
๊ณผ๋ ๋ณ๊ฐ์ ๋๋ค.OAUTH_MERGE_ACCOUNTS_BY_EMAIL
- OAuth ๊ณต๊ธ์๊ฐ ์ ๊ณตํ ์ด๋ฉ์ผ ์ฃผ์์ ์ผ์นํ๋ ๊ณ์ ์ ๋ก๊ทธ์ธํ ์ ์๊ฒ ํฉ๋๋ค.- ์ด๋ ๋ชจ๋ OAuth ๊ณต๊ธ์๊ฐ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ํ์ธํ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ์์ ํ์ง ์์ผ๋ฉฐ ๊ณ์ ํ์ทจ๊ฐ ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
OAUTH_UPDATE_PICTURE_ON_LOGIN
-true
๋ก ์ค์ ํ๋ฉด ์ฌ์ฉ์๊ฐ OAuth๋ฅผ ํตํด ์ ๊ณต๋ ํ๋กํ ์ฌ์ง์ด ๋ก๊ทธ์ธ ์ ์ ๋ฐ์ดํธ๋ฉ๋๋ค.OAUTH_PICTURE_CLAIM
์ ๋น ๋ฌธ์์ด๋ก ์ค์ ํ์ฌ OAuth ์ฌ์ง ํด๋ ์์ ๋นํ์ฑํํ๋ฉด ์ด ์ค์ ์ ๋ฌด์๋ฉ๋๋ค.
OAUTH_PICTURE_CLAIM
- ํ๋กํ ์ฌ์ง ์ ์ฅ์ ์ฌ์ฉ์ ์ ์ํ๊ฑฐ๋ ๋นํ์ฑํํ ์ ์์ต๋๋ค. ๊ธฐ๋ณธ๊ฐ์ธpicture
๋ ๋๋ถ๋ถ์ ๊ณต๊ธ์์๊ฒ ์๋ํ๋ฉฐ, ๋น ๋ฌธ์์ด๋ก ์ค์ ํ๋ฉด ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๊ธฐ๋ณธ ์ฌ์ฉ์ ํ๋กํ ์ฌ์ง์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
Googleโ
Google OAuth ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด Googles Documentation์ ์ฐธ์กฐํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ฉ Google OAuth ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
ํ์ฉ๋ ๋ฆฌ๋๋ ์
URI์๋ <open-webui>/oauth/google/callback
์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ํ๊ฒฝ ๋ณ์๊ฐ ํ์ํฉ๋๋ค:
GOOGLE_CLIENT_ID
- Google OAuth ํด๋ผ์ด์ธํธ IDGOOGLE_CLIENT_SECRET
- Google OAuth ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
Microsoftโ
Microsoft OAuth ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด Microsofts Documentation์ ์ฐธ์กฐํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ฉ Microsoft OAuth ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
ํ์ฉ๋ ๋ฆฌ๋๋ ์
URI์๋ <open-webui>/oauth/microsoft/callback
์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
Microsoft OAuth ์ง์์ ํ์ฌ ๋จ์ผ ํ ๋ํธ์ ํ์ ๋๋ฉฐ, ๋จ์ผ Entra ์กฐ์ง ๋๋ ๊ฐ์ธ Microsoft ๊ณ์ ๋ง ์ง์๋ฉ๋๋ค.
๋ค์ ํ๊ฒฝ ๋ณ์๊ฐ ํ์ํฉ๋๋ค:
MICROSOFT_CLIENT_ID
- Microsoft OAuth ํด๋ผ์ด์ธํธ IDMICROSOFT_CLIENT_SECRET
- Microsoft OAuth ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟMICROSOFT_CLIENT_TENANT_ID
- Microsoft ํ ๋ํธ ID - ๊ฐ์ธ ๊ณ์ ์๋9188040d-6c67-4c5b-b112-36a304b66dad
๋ฅผ ์ฌ์ฉํ์ธ์
Githubโ
Github OAuth ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด Githubs Documentation์ ์ฐธ์กฐํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์
์ฉ OAuth ์ฑ ๋๋ Github ์ฑ์ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ํ์ธํ์ธ์.
ํ์ฉ๋ ๋ฆฌ๋๋ ์
URI์๋ <open-webui>/oauth/github/callback
์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ํ๊ฒฝ ๋ณ์๊ฐ ํ์ํฉ๋๋ค:
GITHUB_CLIENT_ID
- Github OAuth ์ฑ ํด๋ผ์ด์ธํธ IDGITHUB_CLIENT_SECRET
- Github OAuth ์ฑ ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟ
OIDCโ
OIDC๋ฅผ ์ง์ํ๋ ๋ชจ๋ ์ธ์ฆ ๊ณต๊ธ์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
email
ํด๋ ์์ด ํ์ํฉ๋๋ค.
name
๋ฐ picture
ํด๋ ์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค.
ํ์ฉ๋ ๋ฆฌ๋๋ ์
URI์๋ <open-webui>/oauth/oidc/callback
์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
๋ค์ ํ๊ฒฝ ๋ณ์๊ฐ ์ฌ์ฉ๋ฉ๋๋ค:
OAUTH_CLIENT_ID
- OIDC ํด๋ผ์ด์ธํธ IDOAUTH_CLIENT_SECRET
- OIDC ํด๋ผ์ด์ธํธ ์ํฌ๋ฆฟOPENID_PROVIDER_URL
- OIDC well-known URL, ์์:https://accounts.google.com/.well-known/openid-configuration
OAUTH_PROVIDER_NAME
- UI์ ํ์ํ ๊ณต๊ธ์ ์ด๋ฆ, ๊ธฐ๋ณธ๊ฐ์ SSOOAUTH_SCOPES
- ์์ฒญํ ๋ฒ์. ๊ธฐ๋ณธ๊ฐ์openid email profile
OAuth ์ญํ ๊ด๋ฆฌโ
์ก์ธ์ค ํ ํฐ์์ ์ญํ ์ ๋ฐํํ๋๋ก ๊ตฌ์ฑํ ์ ์๋ ๋ชจ๋ OAuth ๊ณต๊ธ์๋ Open WebUI ์ญํ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๋ฉด ENABLE_OAUTH_ROLE_MANAGEMENT
๋ฅผ true
๋ก ์ค์ ํ์ธ์.
OAuth ๊ณต๊ธ์๊ฐ ๋ฐํํ๋ ์ญํ ๊ณผ ์ผ์นํ๋๋ก ๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
OAUTH_ROLES_CLAIM
- ์ญํ ์ด ํฌํจ๋ ํด๋ ์. ๊ธฐ๋ณธ๊ฐ์roles
. ์ค์ฒฉ ํํ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค, ์:user.roles
.OAUTH_ALLOWED_ROLES
- ๋ก๊ทธ์ธ ํ์ฉ๋๋ ์ญํ ์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก (Open WebUI ์ญํuser
๋ฅผ ๋ฐ์).OAUTH_ADMIN_ROLES
- ๊ด๋ฆฌ์ ๋ก๊ทธ์ธ ํ์ฉ๋๋ ์ญํ ์ ์ผํ๋ก ๊ตฌ๋ถ๋ ๋ชฉ๋ก (Open WebUI ์ญํadmin
์ ๋ฐ์).
๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ์ญํ ์ ๋ณ๊ฒฝํ ๊ฒฝ์ฐ ์๋ก์ด ์ญํ ์ ๋ฐ์ผ๋ ค๋ฉด ๋ก๊ทธ์์ ํ ๋ค์ ๋ก๊ทธ์ธํด์ผ ํฉ๋๋ค.
OAuth ๊ทธ๋ฃน ๊ด๋ฆฌโ
์ก์ธ์ค ํ ํฐ์์ ๊ทธ๋ฃน์ ๋ฐํํ๋๋ก ๊ตฌ์ฑํ ์ ์๋ ๋ชจ๋ OAuth ๊ณต๊ธ์๋ ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธํ ๋ Open WebUI์ ์ฌ์ฉ์ ๊ทธ๋ฃน ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ด ๋๊ธฐํ๋ฅผ ํ์ฑํํ๋ ค๋ฉด ENABLE_OAUTH_GROUP_MANAGEMENT
๋ฅผ true
๋ก ์ค์ ํ์ธ์.
๋ค์ ํ๊ฒฝ ๋ณ์๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค:
OAUTH_GROUP_CLAIM
- ID/์ก์ธ์ค ํ ํฐ์์ ์ฌ์ฉ์์ ๊ทธ๋ฃน ๋ฉค๋ฒ์ญ์ด ํฌํจ๋ ํด๋ ์. ๊ธฐ๋ณธ๊ฐ์groups
. ์ค์ฒฉ ํํ๋ก๋ ์ฌ์ฉํ ์ ์์ต๋๋ค, ์:user.memberOf
.ENABLE_OAUTH_GROUP_MANAGEMENT
๊ฐ true์ธ ๊ฒฝ์ฐ ํ์์ ๋๋ค.ENABLE_OAUTH_GROUP_CREATION
-true
๋ก ์ค์ ๋์ด ์๊ณ (ENABLE_OAUTH_GROUP_MANAGEMENT
๋true
๋ก ์ค์ ๋ ๊ฒฝ์ฐ), Open WebUI๋ **์ฆ์ ๊ทธ๋ฃน ์์ฑ(JIT)**์ ์ํํฉ๋๋ค. ์ด๋ ์ฌ์ฉ์์ OAuth ํด๋ ์์ ์๋ ๊ทธ๋ฃน์ด ์์คํ ์ ์์ง ์กด์ฌํ์ง ์์ ๊ฒฝ์ฐ OAuth ๋ก๊ทธ์ธ ๋์ค ์๋์ผ๋ก ๊ทธ๋ฃน์ ์์ฑํ๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์false
์ ๋๋ค. ๋ง์ฝfalse
์ผ ๊ฒฝ์ฐ, ๊ธฐ์กด Open WebUI ๊ทธ๋ฃน์ ๋ฉค๋ฒ์ญ๋ง ๊ด๋ฆฌ๋ฉ๋๋ค.
ENABLE_OAUTH_GROUP_MANAGEMENT
๊ฐ true
๋ก ์ค์ ๋ ๊ฒฝ์ฐ, ์ฌ์ฉ์์ Open WebUI ๊ทธ๋ฃน ๋ฉค๋ฒ์ญ์ ๋ก๊ทธ์ธ ์ OAuth ํด๋ ์์์ ๋ฐ์ ๊ทธ๋ฃน๊ณผ ์๊ฒฉํ๊ฒ ๋๊ธฐํ๋ฉ๋๋ค.
- ์ฌ์ฉ์๋ OAuth ํด๋ ์๊ณผ ์ผ์นํ๋ Open WebUI ๊ทธ๋ฃน์ ์ถ๊ฐ๋ฉ๋๋ค.
- ์ฌ์ฉ์๋ ํด๋น ๋ก๊ทธ์ธ ์ธ์ ์ OAuth ํด๋ ์์ ํฌํจ๋์ง ์์ Open WebUI ๊ทธ๋ฃน(์ง์ ์์ฑ๋์๊ฑฐ๋ Open WebUI ๋ด๋ถ์์ ์๋์ผ๋ก ํ ๋น๋ ๊ทธ๋ฃน ํฌํจ)์์ ์ ๊ฑฐ๋ฉ๋๋ค.
๋ชจ๋ ํ์ํ ๊ทธ๋ฃน์ด OAuth ์ ๊ณต์์์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ตฌ์ฑ๋์ด ์๊ณ ๊ทธ๋ฃน ํด๋ ์(OAUTH_GROUP_CLAIM
)์ ํฌํจ๋์ด ์๋์ง ํ์ธํ์ธ์.
๊ด๋ฆฌ์ ์ฌ์ฉ์์ ๊ทธ๋ฃน ๋ฉค๋ฒ์ญ์ OAuth ๊ทธ๋ฃน ๊ด๋ฆฌ์ ์ํด ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋์ง ์์ต๋๋ค.
์ฌ์ฉ์์ ๊ทธ๋ฃน์ด OAuth ์ ๊ณต์์์ ๋ณ๊ฒฝ๋ ๊ฒฝ์ฐ, Open WebUI๋ฅผ ๋ก๊ทธ์์ ํ ๋ค์ ๋ก๊ทธ์ธํด์ผ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์๋ฉ๋๋ค.
์ ๋ขฐํ ์ ์๋ ํค๋โ
Open WebUI๋ ์ฌ์ฉ์์ ์ธ๋ถ ์ ๋ณด๋ฅผ HTTP ํค๋์ ํฌํจํ์ฌ ์ ๋ฌํ๋ ์ธ์ฆ ์ญ๋ฐฉํฅ ํ๋ก์๋ก ์ธ์ฆ์ ์์ํ ์ ์์ต๋๋ค. ์ด ํ์ด์ง์๋ ์ ๊ณต๋๋ ๋ช ๊ฐ์ง ์์ ๊ตฌ์ฑ๋ค์ด ํฌํจ๋์ด ์์ต๋๋ค.
์๋ชป๋ ๊ตฌ์ฑ์ ์ฌ์ฉ์๋ค์ด Open WebUI ์ธ์คํด์ค์์ ์์์ ์ฌ์ฉ์๋ก ์ธ์ฆํ๋ ๊ฒ์ ํ์ฉํ ์ ์์ต๋๋ค.
HOST=127.0.0.1
์ ์ค์ ํ์ฌ ๋ฃจํ๋ฐฑ ์ธํฐํ์ด์ค์์๋ง ์์ ํ๋๋ก ์ค์ ํ๋ ๋ฑ ์ธ์ฆ ํ๋ก์๋ง Open WebUI์ ์ก์ธ์คํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค.
์ผ๋ฐ ๊ตฌ์ฑโ
WEBUI_AUTH_TRUSTED_EMAIL_HEADER
ํ๊ฒฝ ๋ณ์๊ฐ ์ค์ ๋๋ฉด, Open WebUI๋ ์ง์ ๋ ํค๋ ๊ฐ์ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์๋ก ์ฌ์ฉํ์ฌ ์๋ ๋ฑ๋ก ๋ฐ ๋ก๊ทธ์ธ์ ์ฒ๋ฆฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด, WEBUI_AUTH_TRUSTED_EMAIL_HEADER=X-User-Email
์ ์ค์ ํ๊ณ X-User-Email: [email protected]
HTTP ํค๋๋ฅผ ์ ๋ฌํ๋ฉด ์ด๋ฉ์ผ [email protected]
์ผ๋ก ์์ฒญ์ด ์ธ์ฆ๋ฉ๋๋ค.
์ต์
์ผ๋ก, WEBUI_AUTH_TRUSTED_NAME_HEADER
๋ฅผ ์ ์ํ์ฌ ์ ๋ขฐํ ์ ์๋ ํค๋๋ก ์์ฑ๋ ์ฌ์ฉ์์ ์ด๋ฆ์ ๊ฒฐ์ ํ ์๋ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์๊ฐ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ์ํฅ์ ๋ฏธ์น์ง ์์ต๋๋ค.
Tailscale Serveโ
Tailscale Serve๋ tailnet ๋ด์์ ์๋น์ค๋ฅผ ๊ณต์ ํ ์ ์์ผ๋ฉฐ, Tailscale์ ์์ฒญ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ค์ ํ๋ Tailscale-User-Login
ํค๋๋ฅผ ์ค์ ํฉ๋๋ค.
์๋๋ Tailscale ์ฌ์ด๋์นด๋ฅผ ์์ํ๊ณ Open WebUI๋ฅผ tailnet์ ํ๊ทธ open-webui
์ ํธ์คํธ ์ด๋ฆ open-webui
๋ก ๋
ธ์ถํ๋ฉฐ, https://open-webui.TAILNET_NAME.ts.net
์์ ์ ๊ทผํ ์ ์๋ ๊ฒฝ์ฐ์ ๊ตฌ์ฑ ์์์
๋๋ค.
๋๋ฐ์ด์ค ์ฐ๊ธฐ ๊ถํ์ด ์๋ OAuth ํด๋ผ์ด์ธํธ๋ฅผ ์์ฑํ์ฌ TS_AUTHKEY
๋ก Tailscale ์ปจํ
์ด๋์ ์ ๋ฌํด์ผ ํฉ๋๋ค.
{
"TCP": {
"443": {
"HTTPS": true
}
},
"Web": {
"${TS_CERT_DOMAIN}:443": {
"Handlers": {
"/": {
"Proxy": "http://open-webui:8080"
}
}
}
}
}
---
services:
open-webui:
image: ghcr.io/open-webui/open-webui:main
volumes:
- open-webui:/app/backend/data
environment:
- HOST=127.0.0.1
- WEBUI_AUTH_TRUSTED_EMAIL_HEADER=Tailscale-User-Login
- WEBUI_AUTH_TRUSTED_NAME_HEADER=Tailscale-User-Name
restart: unless-stopped
tailscale:
image: tailscale/tailscale:latest
environment:
- TS_AUTH_ONCE=true
- TS_AUTHKEY=${TS_AUTHKEY}
- TS_EXTRA_ARGS=--advertise-tags=tag:open-webui
- TS_SERVE_CONFIG=/config/serve.json
- TS_STATE_DIR=/var/lib/tailscale
- TS_HOSTNAME=open-webui
volumes:
- tailscale:/var/lib/tailscale
- ./tailscale:/config
- /dev/net/tun:/dev/net/tun
cap_add:
- net_admin
- sys_module
restart: unless-stopped
volumes:
open-webui: {}
tailscale: {}
Open WebUI์ ๋์ผํ ๋คํธ์ํฌ ์ปจํ ์คํธ์์ Tailscale์ ์คํํ๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉ์๊ฐ Serve ํ๋ก์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ง์ Open WebUI์ ์ ๊ทผํ ์ ์์ต๋๋ค. Tailscale์ ACL์ ์ฌ์ฉํ์ฌ 443๋ฒ ํฌํธ์๋ง ์ ๊ทผ์ ์ ํํด์ผ ํฉ๋๋ค.
Cloudflare Tunnel๊ณผ Cloudflare Accessโ
Cloudflare Tunnel์ Cloudflare Access์ ํจ๊ป ์ฌ์ฉํ์ฌ Open WebUI๋ฅผ SSO๋ก ๋ณดํธํ ์ ์์ต๋๋ค.
Cloudflare ๋ฌธ์์๋ ๊ฑฐ์ ์ค๋ช
๋์ด ์์ง ์์ง๋ง Cf-Access-Authenticated-User-Email
์ ์ธ์ฆ๋ ์ฌ์ฉ์์ ์ด๋ฉ์ผ ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค.
์๋๋ Cloudflare ์ฌ์ด๋์นด๋ฅผ ์ค์ ํ๋ Docker Compose ํ์ผ ์์์
๋๋ค.
๊ตฌ์ฑ์ ๋์๋ณด๋๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋๋ค.
๋์๋ณด๋์์ ํฐ๋ ํ ํฐ์ ๊ฐ์ ธ์ ํฐ๋ ๋ฐฑ์๋๋ฅผ http://open-webui:8080
์ผ๋ก ์ค์ ํ๊ณ "Protect with Access"๊ฐ ์ ํ๋์ด ๊ตฌ์ฑ๋์๋์ง ํ์ธํ์ธ์.
---
์๋น์ค:
open-webui:
์ด๋ฏธ์ง: ghcr.io/open-webui/open-webui:main
๋ณผ๋ฅจ:
- open-webui:/app/backend/data
ํ๊ฒฝ:
- HOST=127.0.0.1
- WEBUI_AUTH_TRUSTED_EMAIL_HEADER=Cf-Access-Authenticated-User-Email
์ฌ์์: unless-stopped
cloudflared:
์ด๋ฏธ์ง: cloudflare/cloudflared:latest
ํ๊ฒฝ:
- TUNNEL_TOKEN=${TUNNEL_TOKEN}
๋ช
๋ น: tunnel run
์ฌ์์: unless-stopped
๋ณผ๋ฅจ:
open-webui: {}
oauth2-proxyโ
oauth2-proxy๋ ์์ OAuth ์ ๊ณต์์ OIDC ์ง์์ ๊ตฌํํ๋ ์ธ์ฆ ๋ฆฌ๋ฒ์ค ํ๋ก์์ ๋๋ค.
๊ตฌ์ฑ ๊ฐ๋ฅํ ์ต์
์ด ๋ง๊ธฐ ๋๋ฌธ์, ์๋๋ Google OAuth๋ก ์ค์ ๋ ์์ ์
๋๋ค.
oauth2-proxy
์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ธํ ์ค์ ๋ฐ ์ ์ฌ์ ์ธ ๋ณด์ ๋ฌธ์ ๋ฅผ ํ์ธํ์ญ์์ค.
์๋น์ค:
open-webui:
์ด๋ฏธ์ง: ghcr.io/open-webui/open-webui:main
๋ณผ๋ฅจ:
- open-webui:/app/backend/data
ํ๊ฒฝ:
- 'HOST=127.0.0.1'
- 'WEBUI_AUTH_TRUSTED_EMAIL_HEADER=X-Forwarded-Email'
- 'WEBUI_AUTH_TRUSTED_NAME_HEADER=X-Forwarded-User'
์ฌ์์: unless-stopped
oauth2-proxy:
์ด๋ฏธ์ง: quay.io/oauth2-proxy/oauth2-proxy:v7.6.0
ํ๊ฒฝ:
OAUTH2_PROXY_HTTP_ADDRESS: 0.0.0.0:4180
OAUTH2_PROXY_UPSTREAMS: http://open-webui:8080/
OAUTH2_PROXY_PROVIDER: google
OAUTH2_PROXY_CLIENT_ID: REPLACEME_OAUTH_CLIENT_ID
OAUTH2_PROXY_CLIENT_SECRET: REPLACEME_OAUTH_CLIENT_ID
OAUTH2_PROXY_EMAIL_DOMAINS: REPLACEME_ALLOWED_EMAIL_DOMAINS
OAUTH2_PROXY_REDIRECT_URL: REPLACEME_OAUTH_CALLBACK_URL
OAUTH2_PROXY_COOKIE_SECRET: REPLACEME_COOKIE_SECRET
OAUTH2_PROXY_COOKIE_SECURE: "false"
์ฌ์์: unless-stopped
ํฌํธ:
- 4180:4180/tcp
Authentikโ
Authentik OAuth ํด๋ผ์ด์ธํธ๋ฅผ ์ค์ ํ๋ ค๋ฉด ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
๋ฐ OAuth2/OpenID ์ ๊ณต์
๋ฅผ ์์ฑํ์ญ์์ค.
ํ์ฉ๋ ๋ฆฌ๋๋ ์
URI์๋ <open-webui>/oauth/oidc/callback
์ด ํฌํจ๋์ด์ผ ํฉ๋๋ค.
์ ๊ณต์๋ฅผ ์์ฑํ ๋ App-name
, Client-ID
, ๊ทธ๋ฆฌ๊ณ Client-Secret
์ ๊ธฐ๋กํ์ฌ open-webui ํ๊ฒฝ ๋ณ์๋ก ์ฌ์ฉํ์ญ์์ค:
- 'ENABLE_OAUTH_SIGNUP=true'
- 'OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true'
- 'OAUTH_PROVIDER_NAME=Authentik'
- 'OPENID_PROVIDER_URL=https://<authentik-url>/application/o/<App-name>/.well-known/openid-configuration'
- 'OAUTH_CLIENT_ID=<Client-ID>'
- 'OAUTH_CLIENT_SECRET=<Client-Secret>'
- 'OAUTH_SCOPES=openid email profile'
- 'OPENID_REDIRECT_URI=https://<open-webui>/oauth/oidc/callback'
Autheliaโ
Authelia๋ ์ ๋ขฐํ ์ ์๋ ํค๋ ์ธ์ฆ์ ์ฌ์ฉํ๊ธฐ ์ํด ํค๋๋ฅผ ๋ฐํํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ๋ฌธ์๋ ์ฌ๊ธฐ์์ ์ ๊ณต๋ฉ๋๋ค.
Authelia ๋ฐฐํฌ์ ๋ณต์ก์ฑ ๋๋ฌธ์ ์์ ๊ตฌ์ฑ์ ์ ๊ณต๋์ง ์์ต๋๋ค.