fix(auth): зачистить остатки auth.nstart.space → altum.nstart.cloud

This commit is contained in:
Александр Зимин
2026-05-26 13:17:58 +00:00
parent d1b4916605
commit c1aaf6a696
9 changed files with 28 additions and 24 deletions
+2 -2
View File
@@ -82,7 +82,7 @@ env:
- name: ORDINIS_KEYCLOAK_ADMIN_ENABLED
value: "true"
- name: ORDINIS_KEYCLOAK_ADMIN_URL
value: "https://auth.nstart.space" # both envs use the same Keycloak
value: "https://altum.nstart.cloud/auth" # both envs use the same Keycloak
- name: ORDINIS_KEYCLOAK_ADMIN_REALM
value: "nstart"
# CLIENT_ID + CLIENT_SECRET arrive via the vault-injected
@@ -94,7 +94,7 @@ env:
After redeploy, check the pod log on startup:
```
KeycloakAdminUserResolver active — base=https://auth.nstart.space realm=nstart client=ordinis-admin-client
KeycloakAdminUserResolver active — base=https://altum.nstart.cloud/auth realm=nstart client=ordinis-admin-client
```
End-to-end:
+1 -1
View File
@@ -29,7 +29,7 @@ echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq
# проверить exp, iss, realm_access.roles
# 3. Issuer правильный?
# должен быть https://auth.nstart.space/realms/nstart
# должен быть https://altum.nstart.cloud/auth/realms/altum
```
Если JWT прошёл проверку, но 401 — backend логи:
+4 -4
View File
@@ -31,9 +31,9 @@ openapi-generator-cli generate \
## 3. Авторизация
Ordinis принимает JWT от Keycloak realm `nstart`:
Ordinis принимает JWT от Keycloak realm `altum`:
- Issuer: `https://auth.nstart.space/realms/nstart`
- Issuer: `https://altum.nstart.cloud/auth/realms/altum`
- Алгоритм: RS256
- JWK Set discoverится через `/.well-known/openid-configuration`.
@@ -42,14 +42,14 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
Для интеграции backend↔backend (например altum-backend → ordinis read-api)
получить service account клиент в Keycloak:
1. Запросить у Ordinis team создание клиента в realm `nstart`.
1. Запросить у Ordinis team создание клиента в realm `altum`.
2. Назначить роль `ordinis-public` (или выше, если нужен RESTRICTED scope).
3. Получить `client_id` + `client_secret`.
**Получение access token (client_credentials):**
```bash
curl -X POST https://auth.nstart.space/realms/nstart/protocol/openid-connect/token \
curl -X POST https://altum.nstart.cloud/auth/realms/altum/protocol/openid-connect/token \
-d "grant_type=client_credentials" \
-d "client_id=altum-backend" \
-d "client_secret=<SECRET>"
+2 -2
View File
@@ -25,7 +25,7 @@ instrument / processing_level / data_format пока отсутствуют в
**Авторизация:**
- На staging пока выключена (`ORDINIS_AUTH_REQUIRED=false`), на prod включится.
- Header `Authorization: Bearer <jwt>` от Keycloak (`auth.nstart.space/realms/nstart`).
- Header `Authorization: Bearer <jwt>` от Keycloak (`altum.nstart.cloud/auth/realms/altum`).
- Альтум использует **service account (m2m client)** в реалме `nstart`, роль
`ordinis-public`. JWT issued через `client_credentials` flow, рефрешится в
altum-backend перед TTL.
@@ -222,7 +222,7 @@ allowlist:
- [ ] Сидинг 4 справочников (`mission`, `instrument`, `processing_level`,
`data_format`) согласно §3 в bundle `cuod`. Отдельный changelog для
добавления схем + начальные записи.
- [ ] Service account `altum-backend` в Keycloak realm `nstart` с ролью
- [ ] Service account `altum-backend` в Keycloak realm `altum` с ролью
`ordinis-public`. Передать `ORDINIS_CLIENT_ID` / `ORDINIS_CLIENT_SECRET`
команде Альтума.
- [ ] CORS allowlist для отладочных доменов Альтума на ingress.
+1 -1
View File
@@ -10,7 +10,7 @@
```bash
# client_credentials (для service-to-service интеграторов)
TOKEN=$(curl -s -X POST https://auth.nstart.space/realms/nstart/protocol/openid-connect/token \
TOKEN=$(curl -s -X POST https://altum.nstart.cloud/auth/realms/altum/protocol/openid-connect/token \
-d grant_type=client_credentials \
-d client_id=$KC_CLIENT_ID -d client_secret=$KC_CLIENT_SECRET | jq -r .access_token)
+2 -2
View File
@@ -53,7 +53,7 @@ Mutations, INTERNAL/RESTRICTED data, workflow и `/me/*` требуют JWT.
```bash
TOKEN=$(curl -s -X POST \
"https://auth.nstart.space/realms/nstart/protocol/openid-connect/token" \
"https://altum.nstart.cloud/auth/realms/altum/protocol/openid-connect/token" \
-d "client_id=ordinis" \
-d "grant_type=password" \
-d "username=user@example.com" \
@@ -604,7 +604,7 @@ DictionaryDetail detail = mapper.readValue(resp.body(), DictionaryDetail.class);
```bash
# client_credentials (для service-to-service интеграторов)
TOKEN=$(curl -s -X POST https://auth.nstart.space/realms/nstart/protocol/openid-connect/token \
TOKEN=$(curl -s -X POST https://altum.nstart.cloud/auth/realms/altum/protocol/openid-connect/token \
-d grant_type=client_credentials \
-d client_id=$KC_CLIENT_ID -d client_secret=$KC_CLIENT_SECRET | jq -r .access_token)
+6 -6
View File
@@ -1,8 +1,8 @@
# Авторизация
Ordinis принимает JWT от Keycloak realm `nstart`:
Ordinis принимает JWT от Keycloak realm `altum`:
- **Issuer:** `https://auth.nstart.space/realms/nstart`
- **Issuer:** `https://altum.nstart.cloud/auth/realms/altum`
- **Алгоритм:** RS256
- **JWK Set discoverится** через `/.well-known/openid-configuration`
@@ -10,7 +10,7 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
Для backend-to-backend интеграции (типичный сценарий):
1. Запросить у Ordinis team создание клиента в realm `nstart`.
1. Запросить у Ordinis team создание клиента в realm `altum`.
2. Назначить role: `ordinis-public` / `ordinis-internal` / `ordinis-restricted`
(по нужному scope, см. ниже).
3. Получить `client_id` + `client_secret`. Хранить в Vault либо secret manager,
@@ -19,7 +19,7 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
## Получение access token
```bash
curl -X POST https://auth.nstart.space/realms/nstart/protocol/openid-connect/token \
curl -X POST https://altum.nstart.cloud/auth/realms/altum/protocol/openid-connect/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials" \
-d "client_id=altum-backend" \
@@ -91,7 +91,7 @@ m2m flow без user session. Получай новый access token при ис
| Среда | Issuer | Realm |
|---|---|---|
| prod | `https://auth.nstart.space/realms/nstart` | `nstart` |
| prod | `https://altum.nstart.cloud/auth/realms/altum` | `nstart` |
| staging | same | same |
| local | same либо local Keycloak (опц) | same |
@@ -105,7 +105,7 @@ m2m flow без user session. Получай новый access token при ис
| 401 на каждый запрос | Token expired | Refresh с TTL buffer |
| 401 на новый token | Invalid client_secret | Re-fetch у Ordinis team |
| 403 на конкретные dictionaries | Scope mismatch | Запросить upgrade role у Ordinis team |
| 500 от Ordinis | Issuer unreachable / JWK fetch fail | Check `auth.nstart.space` health |
| 500 от Ordinis | Issuer unreachable / JWK fetch fail | Check `altum.nstart.cloud/auth` health |
## Дальше
@@ -6,7 +6,7 @@ import org.springframework.boot.context.properties.ConfigurationProperties;
* Конфиг JWT auth для интеграции с Keycloak (@nstart/auth).
*
* <p>{@code issuerUri} — OIDC issuer URL, например
* {@code https://auth.nstart.space/realms/nstart}. Spring Security сам тянет
* {@code https://altum.nstart.cloud/auth/realms/altum}. Spring Security сам тянет
* JWK Set через {@code .well-known/openid-configuration}, поддерживает rotation
* ключей. Если не задан — JWT validation выключен (permissive mode для dev).
*
@@ -21,14 +21,18 @@ import java.util.List;
* OpenAPI 3 spec для Swagger UI на {@code /swagger-ui.html}. Spec — на
* {@code /v3/api-docs}.
*
* <p>Авторизация — JWT bearer от Keycloak ({@code auth.nstart.space}).
* Service account для интеграторов (Альтум — {@code altum-backend}).
* <p>Авторизация — JWT bearer от Keycloak realm {@code altum}
* ({@code altum.nstart.cloud/auth/realms/altum}). Service account для
* интеграторов через altum auth-service client management.
*
* <p>Старый realm {@code nstart} ({@code auth.nstart.space}) deprecated
* c Phase 1b (MR !271) — не использовать.
*/
@Configuration
public class OpenApiConfig {
/** Keycloak issuer URI — base для auth/token endpoints. По умолчанию prod realm. */
@Value("${ordinis.openapi.oauth.issuer-uri:https://auth.nstart.space/realms/nstart}")
/** Keycloak issuer URI — base для auth/token endpoints. По умолчанию altum realm. */
@Value("${ordinis.openapi.oauth.issuer-uri:https://altum.nstart.cloud/auth/realms/altum}")
private String oauthIssuer;
@Bean
@@ -72,7 +76,7 @@ public class OpenApiConfig {
new Server().url("http://localhost:8080").description("local dev")))
.components(new Components()
// Primary scheme: OAuth2 PKCE (для interactive Swagger UI users).
// Keycloak realm `nstart`, public client `ordinis-swagger` с PKCE.
// Keycloak realm `altum`, public client `ordinis` с PKCE.
.addSecuritySchemes("oauth2",
new SecurityScheme()
.type(SecurityScheme.Type.OAUTH2)