From aa06c05d88407048a1d54c99c4566725d2c18f59 Mon Sep 17 00:00:00 2001 From: mac Date: Mon, 13 Jul 2026 17:20:05 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E9=80=9Asso=E5=88=B0wayne=E7=99=BB?= =?UTF-8?q?=E9=99=86=E7=9A=84=E5=85=A8=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- authserver/.gitignore | 2 + authserver/README.md | 6 +- authserver/internal/service/wayen.go | 29 ++++++++++ authserver/web/nginx.conf | 12 ++++ authserver/web/src/App.vue | 87 +++++++++------------------- authserver/web/src/style.css | 31 ---------- 6 files changed, 72 insertions(+), 95 deletions(-) diff --git a/authserver/.gitignore b/authserver/.gitignore index 24fa82a..eca0741 100644 --- a/authserver/.gitignore +++ b/authserver/.gitignore @@ -1,5 +1,7 @@ .cache/ .env +.env.* +!.env.example .DS_Store *.tar bin/ diff --git a/authserver/README.md b/authserver/README.md index 5cba5e2..80d6010 100644 --- a/authserver/README.md +++ b/authserver/README.md @@ -89,7 +89,7 @@ go run ./cmd/server 发布脚本会在本地完成: - 构建后端和前端 Docker 镜像 -- 读取本地 `.env`,生成并应用线上 `ConfigMap`/`Secret` +- 读取本地 `.env.server`,生成并应用线上 `ConfigMap`/`Secret` - 导出 `authserver-images-.tar` - 上传到服务器 - 导入 RKE2 使用的 `containerd` @@ -102,7 +102,7 @@ go run ./cmd/server - 远端目录:`/authserver` - containerd socket:`/run/k3s/containerd/containerd.sock` -发布脚本默认把仓库根目录的 `.env` 当作线上配置源。也就是说,发版前需要先把 `.env` 改成目标环境的实际值;脚本会在发版时重新生成并应用 `authserver-config` 和 `authserver-secret`。 +发布脚本默认把仓库根目录的 `.env.server` 当作服务器配置源;脚本会在发版时重新生成并应用 `authserver-config` 和 `authserver-secret`。本地开发用的 `.env` 不会被默认发布。 脚本默认不会拦截测试环境配置。如果你要对正式环境启用更严格的保护,可以显式打开: @@ -125,7 +125,7 @@ bash scripts/release.sh 1.0.5 如果需要覆盖默认值,可以传环境变量: ```bash -ENV_FILE=.env \ +ENV_FILE=.env.server \ DEPLOY_HOST=218.11.5.223 \ DEPLOY_KEY=/path/to/key.pem \ REMOTE_DIR=/authserver \ diff --git a/authserver/internal/service/wayen.go b/authserver/internal/service/wayen.go index a21f2d3..a80797e 100644 --- a/authserver/internal/service/wayen.go +++ b/authserver/internal/service/wayen.go @@ -53,6 +53,13 @@ func (s *WayenService) Login(email, username string) (*WayenLoginResult, error) if email == "" { return nil, ErrWayenEmailMissing } + if strings.TrimSpace(s.cfg.OAuthRedirectURI) != "" && strings.TrimSpace(s.cfg.WayenTargetURL) != "" { + target, err := s.oauthLoginURL(s.cfg.OAuthRedirectURI, s.cfg.WayenTargetURL) + if err != nil { + return nil, err + } + return &WayenLoginResult{TargetURL: target}, nil + } if strings.TrimSpace(s.cfg.WayenLoginURL) == "" || strings.TrimSpace(s.cfg.WayenTargetURL) == "" { return nil, ErrWayenNotConfigured } @@ -100,6 +107,28 @@ func (s *WayenService) Login(email, username string) (*WayenLoginResult, error) }, nil } +func (s *WayenService) oauthLoginURL(redirectURI, targetURL string) (string, error) { + parsed, err := url.Parse(strings.TrimSpace(redirectURI)) + if err != nil { + return "", err + } + next, err := url.Parse(strings.TrimSpace(targetURL)) + if err != nil { + return "", err + } + if next.Path == "" || next.Path == "/" { + next.Path = "/sign-in" + } + values := next.Query() + values.Set("ref", "oauth") + next.RawQuery = values.Encode() + + query := parsed.Query() + query.Set("next", next.String()) + parsed.RawQuery = query.Encode() + return parsed.String(), nil +} + func (s *WayenService) loginRequest(loginURL, email, password string) (string, io.Reader, string, error) { usernameKey := defaultConfigValue(s.cfg.WayenUsernameKey, "email") passwordKey := defaultConfigValue(s.cfg.WayenPasswordKey, "password") diff --git a/authserver/web/nginx.conf b/authserver/web/nginx.conf index 0d567c7..8b78554 100644 --- a/authserver/web/nginx.conf +++ b/authserver/web/nginx.conf @@ -41,6 +41,18 @@ server { proxy_read_timeout 60s; } + location /auth/oauth/ { + proxy_pass http://authserver-backend:8083; + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_connect_timeout 5s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + } + location /auth/ { try_files $uri $uri/ /auth/index.html; } diff --git a/authserver/web/src/App.vue b/authserver/web/src/App.vue index 84d7f92..a75ce29 100644 --- a/authserver/web/src/App.vue +++ b/authserver/web/src/App.vue @@ -1,24 +1,16 @@ @@ -168,9 +149,7 @@ onMounted(async () => {

AuthServer

Wayen 登录入口

-

当前仅保留 SSO 登录和 Wayen 单点跳转。

- -

{{ message }}

+

正在跳转到 SSO 登录...

@@ -191,20 +170,6 @@ onMounted(async () => { Wayen -
-

Wayen 凭据

- - - -

{{ message }}

diff --git a/authserver/web/src/style.css b/authserver/web/src/style.css index e6af69c..6c8cffd 100644 --- a/authserver/web/src/style.css +++ b/authserver/web/src/style.css @@ -70,22 +70,6 @@ h1 { box-shadow: 0 18px 50px rgb(43 57 84 / 10%); } -.form { - display: grid; - gap: 10px; -} - -.stack { - gap: 14px; -} - -.form label span { - display: block; - margin-bottom: 6px; - color: #526174; - font-size: 13px; -} - .primary { border-color: #1b64d8; background: #1b64d8; @@ -190,21 +174,6 @@ h1 { font-size: 14px; } -.wayen-config { - width: min(360px, 100%); - padding: 22px; - border: 1px solid #dbe3ef; - border-radius: 8px; - background: #ffffff; - box-shadow: 0 18px 50px rgb(43 57 84 / 10%); -} - -.config-title { - color: #172033; - font-size: 16px; - font-weight: 700; -} - @media (max-width: 560px) { .wayen-header { align-items: flex-start;