Compare commits
4
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a289aa2799 | ||
|
|
a63c901407 | ||
|
|
e49f270a0e | ||
|
|
34bcd89bd0 |
@@ -0,0 +1,18 @@
|
||||
# AP1 internal SPA direct: Google-federated profile
|
||||
|
||||
```text
|
||||
SPA -> Keycloak -> Google
|
||||
SPA <- Keycloak code/token <- Keycloak
|
||||
SPA -> Spring API with Keycloak access token
|
||||
```
|
||||
|
||||
Google은 upstream authentication만 담당한다. SPA와 Resource Server의 trust
|
||||
anchor는 계속 Keycloak issuer/JWKS/audience다. 따라서 Spring이 Google
|
||||
ID token을 직접 받거나 Google JWKS를 검증하지 않는다.
|
||||
|
||||
추가 운영 항목은 Google client secret, exact broker redirect URI, safe First
|
||||
Broker Login, `sub` account key, claim mapper다. 로컬에서는 두 번째 Keycloak
|
||||
realm이 Google 역할을 하므로 외부 credential 없이 같은 hop을 재현한다.
|
||||
|
||||
`verify-internal-spa-google-contract.sh`는 broker 설정과 기존 AP1 SPA의
|
||||
zero-change federation E2E를 함께 실행한다.
|
||||
@@ -0,0 +1,17 @@
|
||||
# AP1 internal SPA direct: local identity profile
|
||||
|
||||
```text
|
||||
Browser SPA --Authorization Code + PKCE--> Keycloak
|
||||
Browser SPA --Bearer access token-------> Spring Resource Server
|
||||
```
|
||||
|
||||
이 profile은 Keycloak 로컬 사용자만으로 동작한다. Google client ID/secret,
|
||||
public domain, broker callback이 없어도 AP1의 login, refresh, logout,
|
||||
audience/issuer 검증과 RBAC를 모두 학습할 수 있다.
|
||||
|
||||
`mock-google` provider가 realm에 함께 존재해도 로컬 로그인은 provider
|
||||
availability에 의존하지 않는다. 실제로 federation 없는 배포를 만들 때는
|
||||
해당 IdP를 disabled로 두거나 realm overlay에서 제거한다.
|
||||
|
||||
빠른 계약 검증은 `verify-internal-spa-no-google-contract.sh`, 실제 브라우저
|
||||
흐름은 `verify-pattern1.sh`가 담당한다.
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
./scripts/verify-google-broker-config.sh
|
||||
./scripts/verify-federation-spa-zero-change.sh
|
||||
echo "AP1 Google-federated profile verified"
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
#!/usr/bin/env sh
|
||||
set -eu
|
||||
|
||||
jq -e '
|
||||
(.clients[] | select(.clientId == "spa-public")
|
||||
| .publicClient == true
|
||||
and .attributes["pkce.code.challenge.method"] == "S256")
|
||||
and
|
||||
([.users[].username] | index("regular-user") != null)
|
||||
' keycloak/import/keycloak-patterns-realm.json >/dev/null
|
||||
|
||||
npm --prefix frontend test
|
||||
echo "AP1 local-identity profile verified without a Google dependency"
|
||||
Reference in New Issue
Block a user