fix and update
This commit is contained in:
@@ -19,7 +19,9 @@ SSL_CERT_DIR=
|
|||||||
SSL_CERT_FULLCHAIN=
|
SSL_CERT_FULLCHAIN=
|
||||||
SSL_CERT_KEY=
|
SSL_CERT_KEY=
|
||||||
|
|
||||||
# Домены без протокола (install.sh подставит PUBLIC_* URL)
|
# Доп. DNS-имена в self-signed сертификат (сайты приложений в LAN через запятую)
|
||||||
|
# EXTRA_SSL_SANS=myapp.lan,portal.company.lpr
|
||||||
|
|
||||||
DOMAIN_API=api.idpmvk.lpr
|
DOMAIN_API=api.idpmvk.lpr
|
||||||
DOMAIN_FRONTEND=sso.idpmvk.lpr
|
DOMAIN_FRONTEND=sso.idpmvk.lpr
|
||||||
DOMAIN_DOCS=
|
DOMAIN_DOCS=
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { resolveFrontendUrl, resolveOAuthIssuer } from './oauth-issuer';
|
|||||||
import {
|
import {
|
||||||
normalizePublicBaseUrl,
|
normalizePublicBaseUrl,
|
||||||
preferCanonicalBase,
|
preferCanonicalBase,
|
||||||
|
resolveFedcmWebIdentityOrigin,
|
||||||
resolvePublicApiBaseFromRequest,
|
resolvePublicApiBaseFromRequest,
|
||||||
resolvePublicFrontendBaseFromRequest
|
resolvePublicFrontendBaseFromRequest
|
||||||
} from './public-url';
|
} from './public-url';
|
||||||
@@ -25,13 +26,7 @@ export interface FedcmEndpoints {
|
|||||||
function buildFedcmEndpointUrls(issuer: string, frontendUrl: string) {
|
function buildFedcmEndpointUrls(issuer: string, frontendUrl: string) {
|
||||||
const base = normalizePublicBaseUrl(issuer);
|
const base = normalizePublicBaseUrl(issuer);
|
||||||
const front = normalizePublicBaseUrl(frontendUrl);
|
const front = normalizePublicBaseUrl(frontendUrl);
|
||||||
|
const webIdentityOrigin = resolveFedcmWebIdentityOrigin(base, front);
|
||||||
let webIdentityOrigin = front;
|
|
||||||
try {
|
|
||||||
webIdentityOrigin = new URL(base).origin;
|
|
||||||
} catch {
|
|
||||||
// keep frontend origin
|
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
return {
|
||||||
configUrl: `${base}/fedcm/config.json`,
|
configUrl: `${base}/fedcm/config.json`,
|
||||||
|
|||||||
@@ -139,3 +139,26 @@ export function hostsMatch(a: string, b: string) {
|
|||||||
|
|
||||||
return a === 'localhost' && b === 'localhost';
|
return a === 'localhost' && b === 'localhost';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** eTLD+1 для FedCM (sso.idpmvk.lpr → idpmvk.lpr). Совпадает с registrable_domain в install.sh */
|
||||||
|
export function resolveRegistrableDomain(hostname: string): string {
|
||||||
|
const host = hostname.trim().toLowerCase();
|
||||||
|
if (!host) return host;
|
||||||
|
const labels = host.split('.').filter(Boolean);
|
||||||
|
if (labels.length <= 2) return host;
|
||||||
|
return `${labels[labels.length - 2]}.${labels[labels.length - 1]}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function resolveFedcmWebIdentityOrigin(issuer: string, frontendUrl: string): string {
|
||||||
|
for (const candidate of [issuer, frontendUrl]) {
|
||||||
|
try {
|
||||||
|
const hostname = new URL(candidate).hostname;
|
||||||
|
const apex = resolveRegistrableDomain(hostname);
|
||||||
|
const proto = new URL(candidate).protocol;
|
||||||
|
return `${proto}//${apex}`;
|
||||||
|
} catch {
|
||||||
|
// try next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return frontendUrl;
|
||||||
|
}
|
||||||
|
|||||||
25
install.sh
25
install.sh
@@ -1626,6 +1626,19 @@ collect_self_signed_sans() {
|
|||||||
sans+=("DNS:${apex}")
|
sans+=("DNS:${apex}")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Дополнительные SAN для сторонних приложений в LAN (через запятую в .env).
|
||||||
|
local extra_sans="${EXTRA_SSL_SANS:-}"
|
||||||
|
if [[ -n "$extra_sans" ]]; then
|
||||||
|
local entry
|
||||||
|
IFS=',' read -ra _extra_sans <<< "$extra_sans"
|
||||||
|
for entry in "${_extra_sans[@]}"; do
|
||||||
|
entry="${entry#"${entry%%[![:space:]]*}"}"
|
||||||
|
entry="${entry%"${entry##*[![:space:]]}"}"
|
||||||
|
[[ -z "$entry" ]] && continue
|
||||||
|
sans+=("DNS:${entry}")
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
(IFS=,; echo "${sans[*]}")
|
(IFS=,; echo "${sans[*]}")
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2760,9 +2773,15 @@ print_intranet_hint() {
|
|||||||
fi
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
if [[ "$(env_get SSL_TYPE none)" == "selfsigned" ]]; then
|
if [[ "$(env_get SSL_TYPE none)" == "selfsigned" ]]; then
|
||||||
echo " Сертификат: ${LOCAL_CERTS_DIR}/shared-intranet (общий для всех доменов)"
|
echo " Сертификат: ${LOCAL_CERTS_DIR}/shared-intranet (общий для всех доменов IdP)"
|
||||||
echo " Браузер покажет предупреждение — примите сертификат для ${DOMAIN_FRONTEND}."
|
echo " FedCM/One Tap: браузер открывает ${apex_domain:-корневой домен}/.well-known/web-identity —"
|
||||||
echo " API вызывается через ${DOMAIN_FRONTEND}/idp-api — отдельно открывать ${DOMAIN_API} не нужно."
|
echo " примите сертификат для ${DOMAIN_FRONTEND}, ${DOMAIN_API}${extra_apex} и сайта вашего приложения."
|
||||||
|
echo " Надёжно: импортируйте fullchain.pem в «Доверенные корневые центры» на каждом ПК (Windows/macOS)."
|
||||||
|
if [[ -n "$(env_get EXTRA_SSL_SANS "")" ]]; then
|
||||||
|
echo " EXTRA_SSL_SANS: $(env_get EXTRA_SSL_SANS "")"
|
||||||
|
else
|
||||||
|
echo " Для другого домена приложения добавьте в .env: EXTRA_SSL_SANS=myapp.lan и ./install.sh --fix-all"
|
||||||
|
fi
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
if [[ "$(env_get LDAP_USE_HOST_NETWORK false)" == "true" ]]; then
|
if [[ "$(env_get LDAP_USE_HOST_NETWORK false)" == "true" ]]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user