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
|
- name: ORDINIS_KEYCLOAK_ADMIN_ENABLED
|
||||||
value: "true"
|
value: "true"
|
||||||
- name: ORDINIS_KEYCLOAK_ADMIN_URL
|
- 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
|
- name: ORDINIS_KEYCLOAK_ADMIN_REALM
|
||||||
value: "nstart"
|
value: "nstart"
|
||||||
# CLIENT_ID + CLIENT_SECRET arrive via the vault-injected
|
# CLIENT_ID + CLIENT_SECRET arrive via the vault-injected
|
||||||
@@ -94,7 +94,7 @@ env:
|
|||||||
After redeploy, check the pod log on startup:
|
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:
|
End-to-end:
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq
|
|||||||
# проверить exp, iss, realm_access.roles
|
# проверить exp, iss, realm_access.roles
|
||||||
|
|
||||||
# 3. Issuer правильный?
|
# 3. Issuer правильный?
|
||||||
# должен быть https://auth.nstart.space/realms/nstart
|
# должен быть https://altum.nstart.cloud/auth/realms/altum
|
||||||
```
|
```
|
||||||
|
|
||||||
Если JWT прошёл проверку, но 401 — backend логи:
|
Если JWT прошёл проверку, но 401 — backend логи:
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ openapi-generator-cli generate \
|
|||||||
|
|
||||||
## 3. Авторизация
|
## 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
|
- Алгоритм: RS256
|
||||||
- JWK Set discoverится через `/.well-known/openid-configuration`.
|
- JWK Set discoverится через `/.well-known/openid-configuration`.
|
||||||
|
|
||||||
@@ -42,14 +42,14 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
|
|||||||
Для интеграции backend↔backend (например altum-backend → ordinis read-api)
|
Для интеграции backend↔backend (например altum-backend → ordinis read-api)
|
||||||
получить service account клиент в Keycloak:
|
получить service account клиент в Keycloak:
|
||||||
|
|
||||||
1. Запросить у Ordinis team создание клиента в realm `nstart`.
|
1. Запросить у Ordinis team создание клиента в realm `altum`.
|
||||||
2. Назначить роль `ordinis-public` (или выше, если нужен RESTRICTED scope).
|
2. Назначить роль `ordinis-public` (или выше, если нужен RESTRICTED scope).
|
||||||
3. Получить `client_id` + `client_secret`.
|
3. Получить `client_id` + `client_secret`.
|
||||||
|
|
||||||
**Получение access token (client_credentials):**
|
**Получение access token (client_credentials):**
|
||||||
|
|
||||||
```bash
|
```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 "grant_type=client_credentials" \
|
||||||
-d "client_id=altum-backend" \
|
-d "client_id=altum-backend" \
|
||||||
-d "client_secret=<SECRET>"
|
-d "client_secret=<SECRET>"
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ instrument / processing_level / data_format пока отсутствуют в
|
|||||||
**Авторизация:**
|
**Авторизация:**
|
||||||
|
|
||||||
- На staging пока выключена (`ORDINIS_AUTH_REQUIRED=false`), на prod включится.
|
- На 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`, роль
|
- Альтум использует **service account (m2m client)** в реалме `nstart`, роль
|
||||||
`ordinis-public`. JWT issued через `client_credentials` flow, рефрешится в
|
`ordinis-public`. JWT issued через `client_credentials` flow, рефрешится в
|
||||||
altum-backend перед TTL.
|
altum-backend перед TTL.
|
||||||
@@ -222,7 +222,7 @@ allowlist:
|
|||||||
- [ ] Сидинг 4 справочников (`mission`, `instrument`, `processing_level`,
|
- [ ] Сидинг 4 справочников (`mission`, `instrument`, `processing_level`,
|
||||||
`data_format`) согласно §3 в bundle `cuod`. Отдельный changelog для
|
`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`
|
`ordinis-public`. Передать `ORDINIS_CLIENT_ID` / `ORDINIS_CLIENT_SECRET`
|
||||||
команде Альтума.
|
команде Альтума.
|
||||||
- [ ] CORS allowlist для отладочных доменов Альтума на ingress.
|
- [ ] CORS allowlist для отладочных доменов Альтума на ingress.
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# client_credentials (для service-to-service интеграторов)
|
# 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 grant_type=client_credentials \
|
||||||
-d client_id=$KC_CLIENT_ID -d client_secret=$KC_CLIENT_SECRET | jq -r .access_token)
|
-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
|
```bash
|
||||||
TOKEN=$(curl -s -X POST \
|
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 "client_id=ordinis" \
|
||||||
-d "grant_type=password" \
|
-d "grant_type=password" \
|
||||||
-d "username=user@example.com" \
|
-d "username=user@example.com" \
|
||||||
@@ -604,7 +604,7 @@ DictionaryDetail detail = mapper.readValue(resp.body(), DictionaryDetail.class);
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
# client_credentials (для service-to-service интеграторов)
|
# 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 grant_type=client_credentials \
|
||||||
-d client_id=$KC_CLIENT_ID -d client_secret=$KC_CLIENT_SECRET | jq -r .access_token)
|
-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
|
- **Алгоритм:** RS256
|
||||||
- **JWK Set discoverится** через `/.well-known/openid-configuration`
|
- **JWK Set discoverится** через `/.well-known/openid-configuration`
|
||||||
|
|
||||||
@@ -10,7 +10,7 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
|
|||||||
|
|
||||||
Для backend-to-backend интеграции (типичный сценарий):
|
Для backend-to-backend интеграции (типичный сценарий):
|
||||||
|
|
||||||
1. Запросить у Ordinis team создание клиента в realm `nstart`.
|
1. Запросить у Ordinis team создание клиента в realm `altum`.
|
||||||
2. Назначить role: `ordinis-public` / `ordinis-internal` / `ordinis-restricted`
|
2. Назначить role: `ordinis-public` / `ordinis-internal` / `ordinis-restricted`
|
||||||
(по нужному scope, см. ниже).
|
(по нужному scope, см. ниже).
|
||||||
3. Получить `client_id` + `client_secret`. Хранить в Vault либо secret manager,
|
3. Получить `client_id` + `client_secret`. Хранить в Vault либо secret manager,
|
||||||
@@ -19,7 +19,7 @@ Ordinis принимает JWT от Keycloak realm `nstart`:
|
|||||||
## Получение access token
|
## Получение access token
|
||||||
|
|
||||||
```bash
|
```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" \
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
||||||
-d "grant_type=client_credentials" \
|
-d "grant_type=client_credentials" \
|
||||||
-d "client_id=altum-backend" \
|
-d "client_id=altum-backend" \
|
||||||
@@ -91,7 +91,7 @@ m2m flow без user session. Получай новый access token при ис
|
|||||||
|
|
||||||
| Среда | Issuer | Realm |
|
| Среда | Issuer | Realm |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| prod | `https://auth.nstart.space/realms/nstart` | `nstart` |
|
| prod | `https://altum.nstart.cloud/auth/realms/altum` | `nstart` |
|
||||||
| staging | same | same |
|
| staging | same | same |
|
||||||
| local | same либо local Keycloak (опц) | same |
|
| local | same либо local Keycloak (опц) | same |
|
||||||
|
|
||||||
@@ -105,7 +105,7 @@ m2m flow без user session. Получай новый access token при ис
|
|||||||
| 401 на каждый запрос | Token expired | Refresh с TTL buffer |
|
| 401 на каждый запрос | Token expired | Refresh с TTL buffer |
|
||||||
| 401 на новый token | Invalid client_secret | Re-fetch у Ordinis team |
|
| 401 на новый token | Invalid client_secret | Re-fetch у Ordinis team |
|
||||||
| 403 на конкретные dictionaries | Scope mismatch | Запросить upgrade role у 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).
|
* Конфиг JWT auth для интеграции с Keycloak (@nstart/auth).
|
||||||
*
|
*
|
||||||
* <p>{@code issuerUri} — OIDC issuer URL, например
|
* <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
|
* JWK Set через {@code .well-known/openid-configuration}, поддерживает rotation
|
||||||
* ключей. Если не задан — JWT validation выключен (permissive mode для dev).
|
* ключей. Если не задан — 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 — на
|
* OpenAPI 3 spec для Swagger UI на {@code /swagger-ui.html}. Spec — на
|
||||||
* {@code /v3/api-docs}.
|
* {@code /v3/api-docs}.
|
||||||
*
|
*
|
||||||
* <p>Авторизация — JWT bearer от Keycloak ({@code auth.nstart.space}).
|
* <p>Авторизация — JWT bearer от Keycloak realm {@code altum}
|
||||||
* Service account для интеграторов (Альтум — {@code altum-backend}).
|
* ({@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
|
@Configuration
|
||||||
public class OpenApiConfig {
|
public class OpenApiConfig {
|
||||||
|
|
||||||
/** Keycloak issuer URI — base для auth/token endpoints. По умолчанию prod realm. */
|
/** Keycloak issuer URI — base для auth/token endpoints. По умолчанию altum realm. */
|
||||||
@Value("${ordinis.openapi.oauth.issuer-uri:https://auth.nstart.space/realms/nstart}")
|
@Value("${ordinis.openapi.oauth.issuer-uri:https://altum.nstart.cloud/auth/realms/altum}")
|
||||||
private String oauthIssuer;
|
private String oauthIssuer;
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@@ -72,7 +76,7 @@ public class OpenApiConfig {
|
|||||||
new Server().url("http://localhost:8080").description("local dev")))
|
new Server().url("http://localhost:8080").description("local dev")))
|
||||||
.components(new Components()
|
.components(new Components()
|
||||||
// Primary scheme: OAuth2 PKCE (для interactive Swagger UI users).
|
// 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",
|
.addSecuritySchemes("oauth2",
|
||||||
new SecurityScheme()
|
new SecurityScheme()
|
||||||
.type(SecurityScheme.Type.OAUTH2)
|
.type(SecurityScheme.Type.OAUTH2)
|
||||||
|
|||||||
Reference in New Issue
Block a user