From de4310239cad1b38c2aec0e3328e3ddc4deb3d59 Mon Sep 17 00:00:00 2001 From: lendry Date: Wed, 1 Jul 2026 15:23:38 +0300 Subject: [PATCH] fix and update --- apps/api-gateway/src/lib/fedcm-config.ts | 13 +++++++----- .../id/oauth-client-one-tap-section.tsx | 8 +++++++ install.sh | 21 ++++++++++++++++++- 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/apps/api-gateway/src/lib/fedcm-config.ts b/apps/api-gateway/src/lib/fedcm-config.ts index 29cd8f5..225fb16 100644 --- a/apps/api-gateway/src/lib/fedcm-config.ts +++ b/apps/api-gateway/src/lib/fedcm-config.ts @@ -38,7 +38,9 @@ function buildFedcmEndpointUrls(issuer: string, frontendUrl: string) { accountsEndpoint: `${base}/fedcm/accounts`, clientMetadataEndpoint: `${base}/fedcm/client_metadata`, idAssertionEndpoint: `${base}/fedcm/id_assertion`, - loginUrl: `${front}/auth/login`, + // FedCM: login_url MUST be same-origin with config.json (W3C FedCM / Chrome). + // На split-domain UI проксируется через nginx: api.idpmvk.lpr/auth/login → frontend. + loginUrl: `${base}/auth/login`, signupUrl: `${front}/auth/register`, webIdentityUrl: `${webIdentityOrigin}/.well-known/web-identity` }; @@ -102,15 +104,16 @@ export async function resolveFedcmEndpoints(core: CoreGrpcService, _req?: Reques } export function buildFedcmProviderConfig(endpoints: FedcmEndpoints) { + const base = normalizePublicBaseUrl(endpoints.issuer); return { - accounts_endpoint: endpoints.accountsEndpoint, - client_metadata_endpoint: endpoints.clientMetadataEndpoint, - id_assertion_endpoint: endpoints.idAssertionEndpoint, + accounts_endpoint: `${base}/fedcm/accounts`, + client_metadata_endpoint: `${base}/fedcm/client_metadata`, + id_assertion_endpoint: `${base}/fedcm/id_assertion`, login_url: endpoints.loginUrl, branding: { background_color: '#ffffff', color: '#1f2430', - icons: [{ url: `${endpoints.frontendUrl}/favicon.ico`, size: 32 }] + icons: [{ url: `${base}/favicon.ico`, size: 32 }] } }; } diff --git a/apps/frontend/components/id/oauth-client-one-tap-section.tsx b/apps/frontend/components/id/oauth-client-one-tap-section.tsx index c4659bd..4c93861 100644 --- a/apps/frontend/components/id/oauth-client-one-tap-section.tsx +++ b/apps/frontend/components/id/oauth-client-one-tap-section.tsx @@ -96,6 +96,14 @@ export function OAuthClientOneTapSection({
  1. Войдите на IdP ({frontendBase}) в этом браузере.
  2. Откройте сайт клиента с виджетом — Chrome покажет нативный диалог или плашку One Tap.
  3. +
  4. + login_url в config.json должен быть на том же домене, что и config ( + {endpoints.issuer}/auth/login), не на SSO-домене. +
  5. +
  6. + configURL для FedCM: {endpoints.fedcmConfigUrl} (не{' '} + {frontendBase}/idp-api/fedcm/config.json). +
  7. При ошибке NetworkError проверьте, что PUBLIC_API_URL = {endpoints.issuer}.
  8. diff --git a/install.sh b/install.sh index 46966a9..b6863c0 100644 --- a/install.sh +++ b/install.sh @@ -2312,11 +2312,25 @@ EOF build_nginx_api_location_block() { if [[ "$NGINX_MODE" == "docker" ]]; then - local proxy proxy_idp proxy_ws + local proxy proxy_idp proxy_ws proxy_frontend proxy="$(render_proxy_root api)" proxy_idp="$(render_proxy_idp_api)" proxy_ws="$(render_proxy_idp_ws)" + proxy_frontend="$(render_proxy_root frontend)" cat </dev/null || true)" if [[ -n "$config_login_url" ]]; then echo -e " ${GREEN}✔${NC} FedCM config.json login_url=${config_login_url}" + if [[ "$config_login_url" != "https://${api_domain}/auth/login" \ + && "$config_login_url" != "http://${api_domain}/auth/login" ]]; then + echo -e " ${YELLOW}!${NC} login_url должен быть same-origin с config (${scheme}://${api_domain}/auth/login)" + echo " Иначе Chrome: «invalid URL for login_url». Пересоберите api-gateway и ./install.sh --fix-all" + fi elif [[ -n "$config_login_url_alias" ]]; then echo -e " ${YELLOW}!${NC} FedCM config.json: используйте ${scheme}://${api_domain}/fedcm/config.json (не /idp-api/ на API-домене)" echo -e " ${GREEN}✔${NC} FedCM config.json (alias /idp-api) login_url=${config_login_url_alias}"