OIDC(OpenID Connect)는 널리 사용되는 클라이언트 인증 메커니즘입니다. 카우치베이스 동기화 게이트웨이에서 지원됩니다.
이러한 맥락에서 클라이언트 를 사용하여 인터넷을 통해 동기화 게이트웨이와 데이터를 동기화하는 카우치베이스 라이트 클라이언트일 수 있습니다. 웹소켓 기반 복제 프로토콜 또는 웹 프론트엔드 또는 모바일 앱일 수 있습니다. 공용 REST 엔드포인트를 통해 동기화 게이트웨이에 액세스하기.
지난 주 에서 OIDC 및 OAuth2 흐름의 기본 사항에 대해 논의했습니다.. 이번 주 블로그 게시물에서는 다음과 같은 맥락에서 OIDC 암시적 흐름 기반 클라이언트 인증에 대해 소개합니다. 카우치베이스 동기화 게이트웨이 복제. 이 게시물은 다음에 대해 잘 알고 있다고 가정합니다. OIDC 와 인증 및 권한 부여를 위한 OAuth2 플로우를 소개합니다. 따라서 이러한 흐름에 익숙하지 않거나 다시 살펴볼 필요가 있다면 지난 주 블로그 게시물을 꼭 읽어보세요.
카우치베이스 동기화 게이트웨이 OIDC 구성
데이터베이스별 기준입니다, 카우치베이스 동기화 게이트웨이가 OIDC 인증을 위해 구성되어야 합니다..
다음은 기본적인 구성
를 사용하세요. (다음 공식 문서 페이지를 참조하세요. 모든 구성 옵션의 전체 목록.)
1 2 3 4 5 6 7 8 9 10 11 |
"oidc": { "default_provider":"google", "제공자": { "google": { "발행자":"https://accounts.google.com", "client_id":"YOUR_CLIENT_ID" "등록":true, "사용자명_클레임":"이메일" } } } |
-
발행자
는 OIDC ID 공급자에 해당하는 인증 URL입니다.client_id
는 OIDC 제공업체에 앱을 등록하는 과정의 일부로 생성됩니다. 여기서 클라이언트는 카우치베이스 라이트 앱 또는 웹 앱. 참고client_id
는 기술적으로 '리소스 소유자'인 앱의 최종 사용자에 해당하지 않습니다.- 그리고
등록
플래그, 설정된 경우true
를 입력하면 ID 토큰 유효성 검사에 성공한 후 동기화 게이트웨이에 사용자가 자동으로 생성됩니다. 사용자명_클레임
에 해당하는 JWT 클레임 를 동기화 게이트웨이 사용자 이름으로 사용하도록 설정합니다. 기본적으로 동기화 게이트웨이 사용자 이름은 다음과 같은 형식을 취합니다.발행자+주체
어디발행자
사용자 이름을 나타냅니다.접두사
. .접두사
값의 기본값은발행자
클레임이 될 수 있으며 사용자_프리픽스 구성 옵션을 통해 다른 클레임 값을 사용하도록 구성한 경우.
카우치베이스 동기화 게이트웨이 OIDC 검색
동기화 게이트웨이를 시작하면 동기화 게이트웨이가 다음과 같이 연결됩니다. 검색 엔드포인트 를 구성한 OIDC 공급자/발급자와 연결하여 관련 공급자 메타데이터를 가져옵니다. 그리고 메타데이터 발급자 공개 키, ID 토큰의 클레임 인코딩에 사용되는 지원되는 암호화 알고리즘 등 토큰 유효성 검사에 필요한 관련 정보를 포함합니다.
검색 엔드포인트는 발급자와 연결된 잘 알려진 검색 URL에 해당합니다. 필요한 경우 필요에 따라 동기화 게이트웨이 discovery_url 구성 옵션.
클라이언트 인증을 위한 OIDC 암시적 흐름
이 흐름은 표준 OIDC 암시적 흐름을 기반으로 합니다. OIDC 기본 블로그에서 설명한. 이는 대체 인증 코드 흐름 기반 접근 방식보다 간단하며 일반적으로 동기화 게이트웨이 OIDC 클라이언트 인증에 선호되는 접근 방식입니다.
무기명 토큰을 사용한 암시적 흐름
이 흐름에서 Couchbase Lite 클라이언트는 OIDC 공급자(OP)에서 검색한 ID 토큰을 다음과 같이 임베드합니다. 무기명 토큰 를 복제 초기화 중에 권한 헤더에 추가합니다.
- 사용자가 카우치베이스 라이트 클라이언트 앱에 로그인하면 클라이언트는 OIDC 공급자와 함께 OIDC 암시적 플로우를 시작하여 ID 토큰을 검색합니다. 이는 표준 OIDC 흐름 절차에 따른 것입니다. OIDC 기본 블로그에 설명되어 있습니다..
- 클라이언트 앱은 HTTP 권한 부여 헤더의 베어러 토큰으로 ID 토큰을 사용하여 복제를 시작합니다.
- 동기화 게이트웨이는 로컬에서 ID 토큰의 유효성을 검사합니다. 토큰 유효성 검사가 성공적으로 완료되면 해당하는
UserCtx
객체가 생성됩니다.- 시작 시 OIDC 공급자 검색 URL에서 검색한 메타데이터는 '오프라인 모드'에서 토큰의 유효성을 검사하는 데 사용됩니다.
- 사용자가 처음으로 동기화 게이트웨이를 통해 인증하는 경우 해당 사용자가 서버에 존재하지 않는 경우, '등록' 구성 옵션이 true로 설정되어 있으면 동기화 게이트웨이가 자동으로 사용자를 생성합니다.
- 초기화에 성공하면 복제가 평소와 같이 진행되며 클라이언트 앱과 동기화 게이트웨이 측의 문서 변경 사항이 동기화됩니다.
- 활성 복제 중에 사용자가 삭제되면 복제가 종료됩니다.
- 사용자와 관련된 액세스 권한이 변경된 경우 업데이트된 액세스 권한의 영향을 받는 문서는 복제되지 않습니다. 예를 들어 사용자가 채널에 대한 액세스 권한을 잃으면 해당 채널의 문서는 가져오지 않습니다.
세션 ID를 사용한 암시적 흐름
이 흐름에서 Couchbase Lite 클라이언트는 복제를 초기화하는 동안 동기화 게이트웨이에서 ID 토큰 유효성 검사에 성공한 후 생성된 세션 ID를 세션 쿠키로 포함합니다.
- 사용자가 카우치베이스 라이트 클라이언트 앱에 로그인하면 클라이언트는 OIDC 공급자와 함께 OIDC 암시적 플로우를 시작하여 ID 토큰을 검색합니다. 이는 표준에 따른 것입니다. OIDC 기본 블로그에 설명된 OIDC 흐름 절차.
- 클라이언트 앱이 세션을 생성합니다. 세션 REST 엔드포인트 사용. ID 토큰은 HTTP 인증 헤더에서 베어러 토큰으로 설정됩니다.
- 동기화 게이트웨이는 로컬에서 ID 토큰의 유효성을 검사합니다. 토큰 유효성 검사가 성공적으로 완료되면 해당하는
UserCtx
객체가 생성됩니다.- 시작 시 OIDC 공급자 검색 URL에서 검색한 메타데이터는 '오프라인 모드'에서 토큰의 유효성을 검사하는 데 사용됩니다.
- 사용자가 동기화 게이트웨이로 인증하는 것이 처음이고 해당 사용자가 서버에 없는 경우, 동기화 게이트웨이가 자동으로 사용자를 생성합니다.
등록
구성 옵션이true
. - 유휴 세션 시간 제한이 24시간인 사용자에 대한 세션이 생성됩니다.
- 참고: 세션 만료는 ID 토큰 만료와 관련이 없습니다. 세션 만료에 대한 자세한 내용은 아래 FAQ 섹션을 참조하세요.
- 세션 ID가 클라이언트에 반환됩니다.
- 클라이언트 앱은 세션 쿠키를 사용하여 세션 ID를 세션 쿠키로 설정하여 복제를 시작합니다.
세션 인증자
as 문서에서 논의된. - 동기화 게이트웨이는 세션의 유효성을 확인하여 세션이 삭제되었는지 또는 만료되었는지 확인합니다.
- 세션이 활성 상태인 경우, 유휴 세션 시간 제한 10%가 경과하면 세션이 24시간으로 자동 연장됩니다.
- 초기화에 성공하면 복제가 평소와 같이 진행되며 클라이언트 앱과 동기화 게이트웨이 측의 문서 변경사항이 동기화됩니다.
- 활성 복제 중에 사용자가 삭제되면 복제가 종료됩니다.
- 사용자와 관련된 액세스 권한이 변경된 경우 업데이트된 액세스 권한의 영향을 받는 문서는 복제되지 않습니다. 예를 들어 사용자가 채널에 대한 액세스 권한을 상실하면 해당 채널의 문서는 가져오지 않습니다.
인증된 사용자에게 액세스 권한 연결하기
동기화 게이트웨이 채널 그리고 역할 는 동기화 게이트웨이의 액세스 제어 메커니즘의 두 가지 핵심 요소입니다. 이들은 액세스 권한 부여 사용자와 연결된 문서 집합을 지정하여 사용자가 읽기/쓰기 액세스 권한이 있는 문서 집합을 지정합니다.
사용자에게 액세스 권한을 할당하는 몇 가지 옵션이 있습니다:
-
- 동기화 기능을 통해 사용자를 채널 또는 역할에 동적으로 할당합니다. access() 또는 role() API 를 사용하여 액세스 권한 부여 문서. 액세스 권한 부여 문서는 사용자에게 할당해야 하는 채널 또는 역할을 지정합니다.
- 관리자를 통해 사용자에게 보조금 정적 할당 _user REST API.
이전 OIDC 인증 흐름에서 보았듯이, 인증에 성공하면 동기화 게이트웨이에서 인증된 사용자를 자동으로 생성하도록 동기화 게이트웨이를 구성할 수 있습니다. 그러나 생성된 사용자는 액세스 권한 부여와 연결되지 않습니다. 이는 공개 채널 액세스 권한이 있는 공개 사용자에 대해 작동합니다.
하지만 사용자별로 액세스 권한을 할당하고 싶다면 어떻게 해야 할까요?
이 작업은 일반적으로 사용자 생성 또는 업데이트를 담당하는 백엔드 애플리케이션 서버를 통해 처리됩니다. 동기화 게이트웨이는 OIDC 인증만 담당합니다.
다음은 일반적인 흐름입니다:
- 백엔드 프로세스 또는 앱 서버는 OIDC 공급업체에 사용자를 등록하는 역할을 담당합니다.
- 등록 후 앱 서버는 동기화 게이트웨이에 해당 사용자를 생성합니다.
_user
REST API를 사용하거나 적절한 액세스 권한 부여 문서를 추가합니다. - 다음에 사용자가 앱에 로그인할 때 앞서 설명한 암시적 흐름 절차를 사용하여 OIDC 인증이 진행됩니다.
- OIDC 플로우 유형에 관계없이 ID 토큰의 유효성이 검사되면 동기화 게이트웨이는 이미 존재하므로 사용자를 만들지 않습니다.
- 복제는 인증된 사용자를 사용하여 평소와 같이 진행됩니다.
- OIDC 공급자에서 사용자가 업데이트되면 앱 서버는 동기화 게이트웨이에서 해당 사용자를 업데이트합니다.
_user
REST API를 사용하거나 액세스 권한 부여 문서를 업데이트합니다.- 활성 복제 중에 사용자가 삭제되면 복제가 종료됩니다.
- 사용자와 관련된 액세스 권한이 변경된 경우 업데이트된 액세스 권한의 영향을 받는 문서는 복제되지 않습니다. 예를 들어 사용자가 채널에 대한 액세스 권한을 상실하면 해당 채널의 문서는 가져오지 않습니다.
자주 묻는 질문(FAQ)
ID 토큰 만료는 복제 시 어떻게 처리되나요?
ID 토큰의 유효성 검사는 복제가 시작될 때 인증 시 수행됩니다. 활성 복제 중에 만료되는 토큰은 진행 중인 복제에 영향을 미치지 않습니다. 그러나 복제와 연결된 사용자가 삭제되면 복제가 종료됩니다. 마찬가지로 사용자와 관련된 액세스 권한에 변경 사항이 있는 경우 진행 중인 복제에 즉시 적용됩니다.
세션이 만료되면 연속 복제가 종료되나요?
아니요. 세션 유효성 검사는 복제가 시작될 때 인증 시 수행됩니다. 활성 복제 중에 세션이 만료되더라도 진행 중인 복제에 영향을 미치지 않습니다. 그러나 복제와 연결된 사용자가 삭제되면 복제가 종료됩니다. 마찬가지로 사용자와 관련된 액세스 권한에 변경 사항이 있는 경우 진행 중인 복제에 즉시 적용됩니다.
세션이 만료되기 전에 세션을 삭제하면 복제가 종료되나요?
아니요. 세션 유효성 검사는 복제가 시작될 때 인증 시에만 수행됩니다. 따라서 활성 복제 중에 세션이 만료되더라도 진행 중인 복제에 영향을 미치지 않습니다. 그러나 복제와 연결된 사용자가 삭제되면 복제가 종료됩니다. 마찬가지로 사용자와 관련된 액세스 권한에 변경 사항이 있는 경우 진행 중인 복제에 즉시 적용됩니다.
채널 보조금 할당에 JWT 클레임을 사용할 수 있나요?
현재로서는 불가능합니다.
어떤 OIDC 제공업체를 지원하나요?
다음을 준수하는 모든 제공업체를 지원합니다. OIDC 그리고 JSON 웹 토큰(JWT) 표준.
추가 리소스
이 게시물에서는 Couchbase 동기화 게이트웨이의 OIDC(OpenID Connect) 인증 지원에 대해 설명했습니다. 다음 게시물에서는 동기화 게이트웨이를 통한 인증 코드 흐름 구현에 대해 설명하겠습니다.
다음은 몇 가지 추가 리소스입니다:
질문이나 피드백이 있으시면 아래에 댓글을 남기거나 다음 주소로 이메일을 보내주세요. priya.rajagopal@couchbase.com. . 카우치베이스 포럼 를 통해 질문할 수 있습니다.
인증 및 권한 부여에 관한 이 시리즈의 나머지 포스팅도 놓치지 마세요: