Files
document-haness/.playwright-mcp/page-2026-08-26T11-38-51-143Z.yml

398 lines
30 KiB
YAML

- generic [ref=f12e3]:
- link "본문으로 건너뛰기" [ref=f12e4] [cursor=pointer]:
- /url: "#main-content"
- banner [ref=f12e5]:
- generic [ref=f12e6]:
- link "TechLog Studio" [ref=f12e7] [cursor=pointer]:
- /url: /studio
- text: TechLog
- generic [ref=f12e8]: Studio
- navigation "Studio 주 탐색" [ref=f12e10]:
- link "작업본" [ref=f12e11] [cursor=pointer]:
- /url: /studio/documents
- link "게시 기록" [ref=f12e12] [cursor=pointer]:
- /url: /studio/publications
- link "새 문서" [ref=f12e13] [cursor=pointer]:
- /url: /studio/documents/new
- link "주제·프로젝트" [ref=f12e14] [cursor=pointer]:
- /url: /studio/taxonomy
- link "릴리즈" [ref=f12e15] [cursor=pointer]:
- /url: /studio/releases
- link "공개 사이트 보기" [ref=f12e16] [cursor=pointer]:
- /url: /
- button "로그아웃" [ref=f12e17]
- main [ref=f12e18]:
- generic [ref=f12e19]:
- generic [ref=f12e20]:
- region [ref=f12e21]:
- generic [ref=f12e22]:
- paragraph [ref=f12e23]: REFERENCE · VERSION 10
- heading "문서 편집" [level=1] [ref=f12e24]
- paragraph [ref=f12e25]: 외부 IdP Federation과 Application 인증 경계
- region [ref=f12e26]:
- generic [ref=f12e27]:
- paragraph [ref=f12e28]: DOCUMENT
- heading "기본 정보" [level=2] [ref=f12e29]
- generic [ref=f12e30]:
- generic [ref=f12e31]:
- generic [ref=f12e32]: 제목
- textbox "제목" [ref=f12e33]: 외부 IdP Federation과 Application 인증 경계
- generic [ref=f12e34]:
- generic [ref=f12e35]: slug
- textbox "slug" [ref=f12e36]:
- /placeholder: 비우면 제목에서 만듭니다 (영문 소문자·숫자·하이픈)
- text: external-idp-federation-application-boundary
- generic [ref=f12e37]:
- generic [ref=f12e38]: 요약
- textbox "요약" [ref=f12e39]: Google 로그인은 다섯 번째 인증 구조가 아니다. Google에서 브로커의 identity brokering과 local session, authorization code를 지나면 애플리케이션이 고르는 것은 여전히 앞의 네 경계 중 하나다.
- generic [ref=f12e40]:
- generic [ref=f12e41]: Topic
- combobox "Topic" [ref=f12e42]:
- option "선택하지 않음"
- option "OAuth/OIDC 인증 경계" [selected]
- generic [ref=f12e43]:
- generic [ref=f12e44]: Project
- combobox "Project" [ref=f12e45]:
- option "미지정"
- option "Backend Clean Architecture"
- option "KeyCloak Patterns" [selected]
- option "Liner N + 1문제"
- group "관계" [ref=f12e46]:
- generic [ref=f12e48]:
- generic [ref=f12e49]:
- generic [ref=f12e50]: 관계 1 대상
- combobox "관계 1 대상" [ref=f12e51]:
- option "대상 선택"
- option "인증 구조를 보안 성숙도 단계로 취급하지 않는다"
- option "서버 세션 기반 인증 구조는 다중 인스턴스에서 어떻게 운영할 것인가"
- option "Authorization Code Flow의 Endpoint와 Credential 이동 기준" [disabled]
- option "BFF 인증 구조 설계 기준"
- option "BFF가 OAuth Token을 관리하는 조건"
- option "BFF의 Session과 OAuth2AuthorizedClient를 어디에 저장할 것인가"
- option "Browser Token을 없애면서 BFF에 Session과 CSRF 책임이 생긴 과정"
- option "Forward-Auth 구조에서 Application Authorization을 어디까지 Edge에 둘 것인가"
- option "Forward-Auth에서 Client가 보낸 Identity Header를 신뢰하면 안 되는 이유"
- option "Forward-Auth에서 Identity Header를 신뢰하기 위한 조건"
- option "외부 IdP Federation을 별도의 인증 구조로 세지 않는다" [selected]
- option "외부 IdP Federation과 Application 인증 경계"
- option "OAuth/OIDC 인증 패턴 선택 기준"
- option "OAuth Token과 Application Session을 구분하는 기준"
- option "Public Client와 Confidential Client 구분 기준"
- option "Refresh Token 관리만 서버로 이전, Access Token은 여전히 Browser에 노출"
- option "Refresh Token Rotation과 다중 Replica 경쟁을 어떻게 처리할 것인가"
- option "SPA에서 토큰을 직접 관리하면서 드러난 Browser Credential 경계" [disabled]
- generic [ref=f12e52]:
- generic [ref=f12e53]: 관계 1 이유
- textbox "관계 1 이유" [ref=f12e54]: 이 기준을 프로젝트 결정으로 굳힌 기록이다.
- generic [ref=f12e55]:
- button "위로" [disabled] [ref=f12e56]
- button "아래로" [ref=f12e57]
- button "삭제" [ref=f12e58]
- generic [ref=f12e59]:
- generic [ref=f12e60]:
- generic [ref=f12e61]: 관계 2 대상
- combobox "관계 2 대상" [ref=f12e62]:
- option "대상 선택"
- option "인증 구조를 보안 성숙도 단계로 취급하지 않는다"
- option "서버 세션 기반 인증 구조는 다중 인스턴스에서 어떻게 운영할 것인가"
- option "Authorization Code Flow의 Endpoint와 Credential 이동 기준" [disabled]
- option "BFF 인증 구조 설계 기준"
- option "BFF가 OAuth Token을 관리하는 조건"
- option "BFF의 Session과 OAuth2AuthorizedClient를 어디에 저장할 것인가"
- option "Browser Token을 없애면서 BFF에 Session과 CSRF 책임이 생긴 과정"
- option "Forward-Auth 구조에서 Application Authorization을 어디까지 Edge에 둘 것인가"
- option "Forward-Auth에서 Client가 보낸 Identity Header를 신뢰하면 안 되는 이유"
- option "Forward-Auth에서 Identity Header를 신뢰하기 위한 조건"
- option "외부 IdP Federation을 별도의 인증 구조로 세지 않는다" [disabled]
- option "외부 IdP Federation과 Application 인증 경계"
- option "OAuth/OIDC 인증 패턴 선택 기준"
- option "OAuth Token과 Application Session을 구분하는 기준"
- option "Public Client와 Confidential Client 구분 기준"
- option "Refresh Token 관리만 서버로 이전, Access Token은 여전히 Browser에 노출"
- option "Refresh Token Rotation과 다중 Replica 경쟁을 어떻게 처리할 것인가"
- option "SPA에서 토큰을 직접 관리하면서 드러난 Browser Credential 경계" [selected]
- generic [ref=f12e63]:
- generic [ref=f12e64]: 관계 2 이유
- textbox "관계 2 이유" [ref=f12e65]: 브로커가 만든 authorization code를 애플리케이션이 받는 흐름이다.
- generic [ref=f12e66]:
- button "위로" [ref=f12e67]
- button "아래로" [ref=f12e68]
- button "삭제" [ref=f12e69]
- generic [ref=f12e70]:
- generic [ref=f12e71]:
- generic [ref=f12e72]: 관계 3 대상
- combobox "관계 3 대상" [ref=f12e73]:
- option "대상 선택"
- option "인증 구조를 보안 성숙도 단계로 취급하지 않는다"
- option "서버 세션 기반 인증 구조는 다중 인스턴스에서 어떻게 운영할 것인가"
- option "Authorization Code Flow의 Endpoint와 Credential 이동 기준" [selected]
- option "BFF 인증 구조 설계 기준"
- option "BFF가 OAuth Token을 관리하는 조건"
- option "BFF의 Session과 OAuth2AuthorizedClient를 어디에 저장할 것인가"
- option "Browser Token을 없애면서 BFF에 Session과 CSRF 책임이 생긴 과정"
- option "Forward-Auth 구조에서 Application Authorization을 어디까지 Edge에 둘 것인가"
- option "Forward-Auth에서 Client가 보낸 Identity Header를 신뢰하면 안 되는 이유"
- option "Forward-Auth에서 Identity Header를 신뢰하기 위한 조건"
- option "외부 IdP Federation을 별도의 인증 구조로 세지 않는다" [disabled]
- option "외부 IdP Federation과 Application 인증 경계"
- option "OAuth/OIDC 인증 패턴 선택 기준"
- option "OAuth Token과 Application Session을 구분하는 기준"
- option "Public Client와 Confidential Client 구분 기준"
- option "Refresh Token 관리만 서버로 이전, Access Token은 여전히 Browser에 노출"
- option "Refresh Token Rotation과 다중 Replica 경쟁을 어떻게 처리할 것인가"
- option "SPA에서 토큰을 직접 관리하면서 드러난 Browser Credential 경계" [disabled]
- generic [ref=f12e74]:
- generic [ref=f12e75]: 관계 3 이유
- textbox "관계 3 이유" [ref=f12e76]: 외부 IdP가 있어도 애플리케이션 쪽 endpoint 이동은 그대로다.
- generic [ref=f12e77]:
- button "위로" [ref=f12e78]
- button "아래로" [disabled] [ref=f12e79]
- button "삭제" [ref=f12e80]
- button "관계 추가" [ref=f12e81]
- region [ref=f12e82]:
- generic [ref=f12e83]:
- paragraph [ref=f12e84]: REFERENCE
- heading "재사용할 기준" [level=2] [ref=f12e85]
- generic [ref=f12e86]:
- generic [ref=f12e87]: 목적
- textbox "목적" [ref=f12e88]: 외부 IdP를 붙이면서 그것을 애플리케이션 인증 구조로 세게 되면 upstream IdP 경계와 애플리케이션 OAuth 경계를 같은 기준으로 묶게 된다. Google은 브로커 앞의 upstream identity provider다. 사용자가 브로커 로그인 화면에서 Google을 고르면 브라우저가 upstream authorization을 하게 되고, 브로커가 그 응답을 검증해 local identity와 연결한 뒤 다시 자기가 만든 authorization code를 애플리케이션으로 보내게 된다. 외부 IdP를 추가해도 애플리케이션 쪽에서 브라우저가 token을 받는지, 어느 계층이 API를 호출하는지는 기존 패턴 선택에 따라 결정한다.
- group "규칙" [ref=f12e89]:
- generic [ref=f12e91]:
- generic [ref=f12e92]:
- generic [ref=f12e93]: 규칙 1 제목
- textbox "규칙 1 제목" [ref=f12e94]: 외부 IdP는 브로커 앞단이고 애플리케이션 경계는 그 뒤다
- generic [ref=f12e95]:
- generic [ref=f12e96]: 규칙 1 본문
- textbox "규칙 1 본문" [ref=f12e97]: 외부 IdP는 브로커 앞의 provider다. 애플리케이션이 고르는 것은 브로커 뒤의 경계이고, 구조 수를 셀 때 외부 IdP를 목록에 넣으면 성격이 다른 것이 섞인다. upstream IdP의 identity assertion은 Keycloak이 검증한다. 애플리케이션은 Keycloak이 발급한 authorization code와 token을 사용하고 Resource Server도 Keycloak issuer를 검증하므로 애플리케이션의 OAuth 처리 방식은 기존 패턴을 그대로 따른다. UI에서 provider를 고르게 하거나 provider별 계정 연결을 다루는 것은 자연스럽다. 다만 Resource Server의 token 검증이나 애플리케이션 인가가 upstream IdP별로 갈리기 시작하면 브로커 경계가 애플리케이션까지 새고 있는지 본다. 외부 IdP의 token을 애플리케이션이 직접 받아 검증하는 경로를 만들면 브로커가 하던 계정 연결과 정책 판단이 함께 빠진다.
- generic [ref=f12e98]:
- button "위로" [disabled] [ref=f12e99]
- button "아래로" [ref=f12e100]
- button "삭제" [ref=f12e101]
- generic [ref=f12e102]:
- generic [ref=f12e103]:
- generic [ref=f12e104]: 규칙 2 제목
- textbox "규칙 2 제목" [ref=f12e105]: stable identity key는 provider와 upstream subject의 조합이다
- generic [ref=f12e106]:
- generic [ref=f12e107]: 규칙 2 본문
- textbox "규칙 2 본문" [ref=f12e108]: email은 바뀔 수 있고 다른 계정과 겹칠 수도 있어서 계정을 잇는 열쇠로 맞지 않는다. 어느 provider의 어느 subject인지를 열쇠로 쓴다. email을 열쇠로 쓰면 사용자가 주소를 바꾼 순간 다른 사람이 된다.
- generic [ref=f12e109]:
- button "위로" [ref=f12e110]
- button "아래로" [ref=f12e111]
- button "삭제" [ref=f12e112]
- generic [ref=f12e113]:
- generic [ref=f12e114]:
- generic [ref=f12e115]: 규칙 3 제목
- textbox "규칙 3 제목" [ref=f12e116]: email 충돌은 별도의 계정 연결 문제로 다룬다
- generic [ref=f12e117]:
- generic [ref=f12e118]: 규칙 3 본문
- textbox "규칙 3 본문" [ref=f12e119]: upstream email이 기존 계정과 같다는 이유로 자동 병합하지 않는다. 같은 주소를 쓰는 다른 사람일 수도 있고 주소를 선점한 공격일 수도 있어서, 기존 계정의 소유권을 증명하는 절차를 따로 둔다.
- generic [ref=f12e120]:
- button "위로" [ref=f12e121]
- button "아래로" [ref=f12e122]
- button "삭제" [ref=f12e123]
- generic [ref=f12e124]:
- generic [ref=f12e125]:
- generic [ref=f12e126]: 규칙 4 제목
- textbox "규칙 4 제목" [ref=f12e127]: mock provider로 확인한 범위와 실제 IdP를 구분한다
- generic [ref=f12e128]:
- generic [ref=f12e129]: 규칙 4 본문
- textbox "규칙 4 본문" [ref=f12e130]: 브로커와 claim mapping 계약까지만 확인했다. 실제 계정과 공개 HTTPS callback, consent 화면, 도메인 정책은 아직 통과해 보지 않았다. 두 범위를 같은 증거로 쓰면 운영에서 처음 보는 실패를 만난다.
- generic [ref=f12e131]:
- button "위로" [ref=f12e132]
- button "아래로" [disabled] [ref=f12e133]
- button "삭제" [ref=f12e134]
- button "규칙 추가" [ref=f12e135]
- group "적용 조건" [ref=f12e136]:
- generic [ref=f12e138]:
- generic [ref=f12e139]:
- generic [ref=f12e140]: 적용 조건 1
- textbox "적용 조건 1" [ref=f12e141]: 외부 IdP를 붙이며 구조 수를 세려 할 때
- generic [ref=f12e142]:
- button "위로" [disabled] [ref=f12e143]
- button "아래로" [ref=f12e144]
- button "삭제" [ref=f12e145]
- generic [ref=f12e146]:
- generic [ref=f12e147]:
- generic [ref=f12e148]: 적용 조건 2
- textbox "적용 조건 2" [ref=f12e149]: 계정 연결 규칙을 정할 때
- generic [ref=f12e150]:
- button "위로" [ref=f12e151]
- button "아래로" [ref=f12e152]
- button "삭제" [ref=f12e153]
- generic [ref=f12e154]:
- generic [ref=f12e155]:
- generic [ref=f12e156]: 적용 조건 3
- textbox "적용 조건 3" [ref=f12e157]: 검증 범위를 문서로 적을 때
- generic [ref=f12e158]:
- button "위로" [ref=f12e159]
- button "아래로" [ref=f12e160]
- button "삭제" [ref=f12e161]
- generic [ref=f12e162]:
- generic [ref=f12e163]:
- generic [ref=f12e164]: 적용 조건 4
- textbox "적용 조건 4" [ref=f12e165]: 브로커를 거치는 흐름과 직접 OIDC 흐름을 비교할 때
- generic [ref=f12e166]:
- button "위로" [ref=f12e167]
- button "아래로" [disabled] [ref=f12e168]
- button "삭제" [ref=f12e169]
- button "적용 조건 추가" [ref=f12e170]
- group "예외" [ref=f12e171]:
- generic [ref=f12e173]:
- generic [ref=f12e174]:
- generic [ref=f12e175]: 예외 1
- textbox "예외 1" [ref=f12e176]: 애플리케이션이 브로커를 거치지 않고 외부 IdP와 직접 OIDC를 하는 구조라면 그 IdP가 애플리케이션의 issuer가 된다. 그때는 client 종류와 endpoint 기준을 그대로 적용한다.
- generic [ref=f12e177]:
- button "위로" [disabled] [ref=f12e178]
- button "아래로" [ref=f12e179]
- button "삭제" [ref=f12e180]
- generic [ref=f12e181]:
- generic [ref=f12e182]:
- generic [ref=f12e183]: 예외 2
- textbox "예외 2" [ref=f12e184]: 조직 계정만 쓰고 외부 IdP가 하나뿐이면 브로커를 두지 않는 선택도 있다. 그때는 계정 연결 규칙이 필요하지 않다.
- generic [ref=f12e185]:
- button "위로" [ref=f12e186]
- button "아래로" [disabled] [ref=f12e187]
- button "삭제" [ref=f12e188]
- button "예외 추가" [ref=f12e189]
- group "예시" [ref=f12e190]:
- generic [ref=f12e192]:
- generic [ref=f12e193]:
- generic [ref=f12e194]: 예시 1
- textbox "예시 1" [ref=f12e195]: Google 로그인을 추가해도 애플리케이션이 고르는 것은 여전히 네 경계 중 하나다
- generic [ref=f12e196]:
- button "위로" [disabled] [ref=f12e197]
- button "아래로" [ref=f12e198]
- button "삭제" [ref=f12e199]
- generic [ref=f12e200]:
- generic [ref=f12e201]:
- generic [ref=f12e202]: 예시 2
- textbox "예시 2" [ref=f12e203]: 브로커가 provider alias와 upstream subject로 account identity를 정한다
- generic [ref=f12e204]:
- button "위로" [ref=f12e205]
- button "아래로" [ref=f12e206]
- button "삭제" [ref=f12e207]
- generic [ref=f12e208]:
- generic [ref=f12e209]:
- generic [ref=f12e210]: 예시 3
- textbox "예시 3" [ref=f12e211]: 애플리케이션이 신뢰하는 issuer는 외부 IdP가 아니라 브로커다
- generic [ref=f12e212]:
- button "위로" [ref=f12e213]
- button "아래로" [ref=f12e214]
- button "삭제" [ref=f12e215]
- generic [ref=f12e216]:
- generic [ref=f12e217]:
- generic [ref=f12e218]: 예시 4
- textbox "예시 4" [ref=f12e219]: mock OIDC provider로 확인한 것은 브로커와 claim mapping 계약까지다
- generic [ref=f12e220]:
- button "위로" [ref=f12e221]
- button "아래로" [disabled] [ref=f12e222]
- button "삭제" [ref=f12e223]
- button "예시 추가" [ref=f12e224]
- generic [ref=f12e225]:
- generic [ref=f12e226]: 마지막 검증일
- textbox "마지막 검증일" [ref=f12e227]
- region [ref=f12e228]:
- generic [ref=f12e229]:
- paragraph [ref=f12e230]: LIVE
- heading "즉시 미리보기" [level=2] [ref=f12e231]
- generic [ref=f12e234]:
- generic [ref=f12e235]:
- navigation "문서 경로" [ref=f12e236]:
- link "Reference" [ref=f12e237] [cursor=pointer]:
- /url: /explore/references
- generic [ref=f12e238]: /
- generic [ref=f12e239]: OAuth/OIDC 인증 경계
- generic [ref=f12e240]: /
- link "KeyCloak Patterns" [ref=f12e241] [cursor=pointer]:
- /url: /projects/keycloak-patterns
- heading "외부 IdP Federation과 Application 인증 경계" [level=1] [ref=f12e242]
- paragraph [ref=f12e243]: Google 로그인은 다섯 번째 인증 구조가 아니다. Google에서 브로커의 identity brokering과 local session, authorization code를 지나면 애플리케이션이 고르는 것은 여전히 앞의 네 경계 중 하나다.
- generic [ref=f12e244]:
- generic [ref=f12e245]:
- term [ref=f12e246]: 유형
- definition [ref=f12e247]: Reference
- generic [ref=f12e248]:
- term [ref=f12e249]: 프로젝트
- definition [ref=f12e250]: KeyCloak Patterns
- generic [ref=f12e251]:
- term [ref=f12e252]: 게시
- definition [ref=f12e253]: 게시 전
- region [ref=f12e254]:
- paragraph [ref=f12e255]: Purpose
- heading "이 기준을 쓰는 이유" [level=2] [ref=f12e256]
- paragraph [ref=f12e257]: 외부 IdP를 붙이면서 그것을 애플리케이션 인증 구조로 세게 되면 upstream IdP 경계와 애플리케이션 OAuth 경계를 같은 기준으로 묶게 된다.Google은 브로커 앞의 upstream identity provider다. 사용자가 브로커 로그인 화면에서 Google을 고르면 브라우저가 upstream authorization을 하게 되고, 브로커가 그 응답을 검증해 local identity와 연결한 뒤 다시 자기가 만든 authorization code를 애플리케이션으로 보내게 된다.외부 IdP를 추가해도 애플리케이션 쪽에서 브라우저가 token을 받는지, 어느 계층이 API를 호출하는지는 기존 패턴 선택에 따라 결정한다.
- article [ref=f12e258]:
- region [ref=f12e259]:
- heading "판단 기준" [level=2] [ref=f12e260]
- list [ref=f12e261]:
- listitem [ref=f12e262]:
- generic [ref=f12e263]: "01"
- generic [ref=f12e264]:
- heading "외부 IdP는 브로커 앞단이고 애플리케이션 경계는 그 뒤다" [level=3] [ref=f12e265]
- paragraph [ref=f12e266]: 외부 IdP는 브로커 앞의 provider다. 애플리케이션이 고르는 것은 브로커 뒤의 경계이고, 구조 수를 셀 때 외부 IdP를 목록에 넣으면 성격이 다른 것이 섞인다. upstream IdP의 identity assertion은 Keycloak이 검증한다. 애플리케이션은 Keycloak이 발급한 authorization code와 token을 사용하고 Resource Server도 Keycloak issuer를 검증하므로 애플리케이션의 OAuth 처리 방식은 기존 패턴을 그대로 따른다. UI에서 provider를 고르게 하거나 provider별 계정 연결을 다루는 것은 자연스럽다. 다만 Resource Server의 token 검증이나 애플리케이션 인가가 upstream IdP별로 갈리기 시작하면 브로커 경계가 애플리케이션까지 새고 있는지 본다. 외부 IdP의 token을 애플리케이션이 직접 받아 검증하는 경로를 만들면 브로커가 하던 계정 연결과 정책 판단이 함께 빠진다.
- listitem [ref=f12e267]:
- generic [ref=f12e268]: "02"
- generic [ref=f12e269]:
- heading "stable identity key는 provider와 upstream subject의 조합이다" [level=3] [ref=f12e270]
- paragraph [ref=f12e271]: email은 바뀔 수 있고 다른 계정과 겹칠 수도 있어서 계정을 잇는 열쇠로 맞지 않는다. 어느 provider의 어느 subject인지를 열쇠로 쓴다. email을 열쇠로 쓰면 사용자가 주소를 바꾼 순간 다른 사람이 된다.
- listitem [ref=f12e272]:
- generic [ref=f12e273]: "03"
- generic [ref=f12e274]:
- heading "email 충돌은 별도의 계정 연결 문제로 다룬다" [level=3] [ref=f12e275]
- paragraph [ref=f12e276]: upstream email이 기존 계정과 같다는 이유로 자동 병합하지 않는다. 같은 주소를 쓰는 다른 사람일 수도 있고 주소를 선점한 공격일 수도 있어서, 기존 계정의 소유권을 증명하는 절차를 따로 둔다.
- listitem [ref=f12e277]:
- generic [ref=f12e278]: "04"
- generic [ref=f12e279]:
- heading "mock provider로 확인한 범위와 실제 IdP를 구분한다" [level=3] [ref=f12e280]
- paragraph [ref=f12e281]: 브로커와 claim mapping 계약까지만 확인했다. 실제 계정과 공개 HTTPS callback, consent 화면, 도메인 정책은 아직 통과해 보지 않았다. 두 범위를 같은 증거로 쓰면 운영에서 처음 보는 실패를 만난다.
- region [ref=f12e282]:
- heading "적용할 때" [level=2] [ref=f12e283]
- list [ref=f12e284]:
- listitem [ref=f12e285]: 외부 IdP를 붙이며 구조 수를 세려 할 때
- listitem [ref=f12e286]: 계정 연결 규칙을 정할 때
- listitem [ref=f12e287]: 검증 범위를 문서로 적을 때
- listitem [ref=f12e288]: 브로커를 거치는 흐름과 직접 OIDC 흐름을 비교할 때
- region [ref=f12e289]:
- heading "예외와 주의" [level=2] [ref=f12e290]
- list [ref=f12e291]:
- listitem [ref=f12e292]: 애플리케이션이 브로커를 거치지 않고 외부 IdP와 직접 OIDC를 하는 구조라면 그 IdP가 애플리케이션의 issuer가 된다. 그때는 client 종류와 endpoint 기준을 그대로 적용한다.
- listitem [ref=f12e293]: 조직 계정만 쓰고 외부 IdP가 하나뿐이면 브로커를 두지 않는 선택도 있다. 그때는 계정 연결 규칙이 필요하지 않다.
- region [ref=f12e294]:
- heading "예시" [level=2] [ref=f12e295]
- list [ref=f12e296]:
- listitem [ref=f12e297]: Google 로그인을 추가해도 애플리케이션이 고르는 것은 여전히 네 경계 중 하나다
- listitem [ref=f12e298]: 브로커가 provider alias와 upstream subject로 account identity를 정한다
- listitem [ref=f12e299]: 애플리케이션이 신뢰하는 issuer는 외부 IdP가 아니라 브로커다
- listitem [ref=f12e300]: mock OIDC provider로 확인한 것은 브로커와 claim mapping 계약까지다
- paragraph [ref=f12e301]: 마지막 검증
- region [ref=f12e302]:
- paragraph [ref=f12e303]: Relations
- heading "이 기록과 연결된 맥락" [level=2] [ref=f12e304]
- list [ref=f12e305]:
- listitem [ref=f12e306]:
- link "브로커가 만든 authorization code를 애플리케이션이 받는 흐름이다. SPA에서 토큰을 직접 관리하면서 드러난 Browser Credential 경계" [ref=f12e307] [cursor=pointer]:
- /url: /cases/spa-browser-credential-boundary
- generic [ref=f12e308]: 브로커가 만든 authorization code를 애플리케이션이 받는 흐름이다.
- strong [ref=f12e309]: SPA에서 토큰을 직접 관리하면서 드러난 Browser Credential 경계
- generic [ref=f12e310]:
- listitem [ref=f12e311]:
- link "외부 IdP가 있어도 애플리케이션 쪽 endpoint 이동은 그대로다. Authorization Code Flow의 Endpoint와 Credential 이동 기준" [ref=f12e312] [cursor=pointer]:
- /url: /references/authorization-code-endpoint-credential-movement
- generic [ref=f12e313]: 외부 IdP가 있어도 애플리케이션 쪽 endpoint 이동은 그대로다.
- strong [ref=f12e314]: Authorization Code Flow의 Endpoint와 Credential 이동 기준
- generic [ref=f12e315]:
- complementary [ref=f12e316]:
- heading "작업 상태" [level=2] [ref=f12e317]
- status "편집 상태" [ref=f12e318]: 저장됨
- generic [ref=f12e319]:
- generic [ref=f12e320]:
- term [ref=f12e321]: 저장 버전
- definition [ref=f12e322]: "10"
- generic [ref=f12e323]:
- term [ref=f12e324]: 종류
- definition [ref=f12e325]: REFERENCE
- paragraph [ref=f12e326]: 불완전한 초안도 저장할 수 있습니다. Ctrl+S 로도 저장합니다. 게시를 누르면 채워야 할 칸을 그 자리에 표시합니다.
- generic [ref=f12e327]:
- button "저장" [disabled] [ref=f12e328]
- button "게시" [ref=f12e329]
- paragraph [ref=f12e330]: 버전 10으로 저장했습니다.