Merge branch 'fix/strip-nstart-realm-refs' into 'main'
fix(auth): зачистить остатки auth.nstart.space → altum.nstart.cloud See merge request 2-6/2-6-4/terravault/ordinis!277
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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 логи:
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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 |
|
||||
|
||||
## Дальше
|
||||
|
||||
|
||||
+1
-1
@@ -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).
|
||||
*
|
||||
|
||||
+9
-5
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user