카우치베이스 모바일 동기화 게이트웨이 시리즈를 시작하기 위해 다음에서 사용자를 인증하고 권한을 부여하는 방법에 대한 이해부터 시작하겠습니다. 동기화 게이트웨이 는 모바일 앱과 Couchbase Server 사이의 중개 구성 요소입니다.
동기화 게이트웨이를 통해 모바일 애플리케이션의 사용자 기반을 인증한 다음 원격 데이터베이스에 액세스할 수 있도록 권한을 부여할 수 있는 다양한 방법이 있습니다. 이후부터 모바일 앱은 양방향 및 멀티마스터 동기화가 가능한 복제를 통해 데이터를 통신할 수 있습니다. 다양한 인증 사용자 메커니즘을 먼저 살펴보세요.
인증
HTTP 기본 인증
모바일 클라이언트는 /dbname/_session으로 확인된 세션 URL을 사용하거나 쿠키 기반 세션을 사용하여 동기화 게이트웨이를 통해 인증할 수 있습니다.
1 2 3 |
curl -H "콘텐츠 유형: 애플리케이션/json" -X POST http://localhost:4984/dbname/_session --data "{"이름":"userID","비밀번호":"pw"}" |
세션 URL POST 요청에 제공된 사용자 자격 증명을 사용하여 올바른 사용자 및 비밀번호가 설정되면 유효성 검사에서 다음을 반환합니다.
1 2 3 4 5 |
{ "인증_핸들러":["default","쿠키"], "ok":true, "userCtx":{"채널":{"!":1,"channel1":1,"channel2":1},"name":"userID"} } |
플러그형 인증
카우치베이스 모바일의 경우, 페이스북 인증 방식은 동기화 게이트웨이가 페이스북과 통신하여 클라이언트의 토큰을 인증하는 플러그인 인증 옵션입니다. 이 기능을 사용하려면 서버 구성 파일에서 아래와 같이 'register' 키의 최상위 속성 'facebook' 를 true로 설정합니다.
1 2 3 4 5 6 7 8 9 10 11 |
{ "facebook" : { "등록" : true }, "데이터베이스": { "grocery-sync": { "서버":"http://cbserver:8091", "버킷":"식료품-동기화", "사용자": {"게스트": {"disabled": true}}, "동기화":`함수(doc) {채널(doc.채널);}` } } } |
여기에서 모바일 클라이언트는 '/dbname/_facebook' 에 POST 요청을 통해 Facebook을 통해 인증하여 새 사용자 계정을 암시적으로 등록하고 이를 포함하는 JSON을 반환할 수 있습니다:
- 액세스 토큰: 페이스북에서 반환한 액세스 토큰
- 이메일: 사용자 이메일
- remote_url: 동기화 게이트웨이 엔드포인트
계정의 사용자 이름은 인증된 이메일 주소와 임의의 비밀번호와 동일합니다.
사용자 지정 인증
모바일 애플리케이션에 대한 사용자 지정 인증을 사용하면 이전의 플러그인 방식과 같은 타사 솔루션에 의존할 필요가 없다는 점에서 몇 가지 장점이 있습니다. 하지만 모바일 앱의 각 엔드포인트 호출과 함께 동기화 게이트웨이와 통신하는 서비스를 유지 관리해야 하므로 전반적으로 더 많은 작업이 수반됩니다. 이는 다음과 같은 기존 사용자 기반이 있는 경우에 따라 달라집니다. LDAP 서버 또는 클라이언트에서 사용자 이름과 비밀번호 조합을 생성하는 기능이 필요할 수 있습니다.
LDAP 서버 설정에서 사용자 기반이 존재하는 사용자 지정 공급자를 구현하려면 모바일 애플리케이션이 먼저 앱 또는 인증 서버를 가리킵니다. 그런 다음 인증 서버가 사용자 인증을 담당하며, 사용자를 성공적으로 인증하면 인증 서버는 동기화 게이트웨이에 API 호출을 수행합니다. 관리자 REST API 에 POST 요청을 보내 해당 사용자에 대한 유효한 세션을 가져오는 두 번째 단계입니다;/dbname/_session엔드포인트. 그런 다음 해당 세션 토큰은 인증 서버로 다시 라우팅된 다음 모바일 클라이언트로 다시 반환됩니다. 모바일 애플리케이션이 토큰을 획득한 후 세 번째이자 마지막 단계는 세션 토큰을 사용하여 동기화 게이트웨이와 직접 통신하여 기기에서 사용자에게 필요한 모든 데이터를 가져오는 것입니다.
사용자 인증이 완료되면 이제 다양한 사용자 권한 부여 메커니즘을 살펴봅니다.
권한 부여
계정: 관리자_채널
동기화 게이트웨이를 사용하면 특정 사용자에게 데이터베이스 내의 특정 문서에 대한 권한을 부여할 수 있습니다. 동기화 게이트웨이를 통해 JSON 구성 파일를 사용하여 동기화 게이트웨이 속성을 정의하고, 사용자가 인증된 후 액세스할 수 있는 채널 목록을 활성화하는 'admin_channels' 기능을 사용할 수 있습니다. 특정 채널에 대한 사용자 권한을 부여하면 문서 읽기 액세스가 허용됩니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
{ "log" : ["*"], "데이터베이스": { "grocery-sync": { "서버":"바다코끼리:", "버킷":"식료품-동기화", "사용자": { "alice": { "disabled" : false, "비밀번호": "비밀번호", "관리자_채널":["항목-alice"] }, "bob": { "disabled" : false, "비밀번호": "비밀번호", "관리자_채널":["*"] }, "동기화" : ' 함수(doc, oldDoc) { 채널("항목-"+doc.소유자); } //소유자의 아이템 채널에 아이템 문서 추가하기 ' } } } } |
위의 예에서 * 별표 채널은 특정 사용자인 Bob에게 관리자 권한을 제공하는 특수 채널로, Bob에게는 데이터베이스 내의 모든 문서에 대한 개방형 액세스 권한이 부여됩니다. 반면에 앨리스는 자신의 항목 채널에 액세스하여 'items-alice' 태그에 한정된 권한을 갖게 되므로 권한 부여 체계에서 앨리스에게 권한이 부여됩니다. 권한 부여가 이루어지도록 하려면 식료품 항목 문서의 소유자 필드를 소유자 개인 항목 채널로 이동합니다.
동기화 기능을 사용하면 사용자가 문서에 액세스할 수 있는 권한이 있는지 확인하여 문서 수정본을 제출할 수 있는 기능을 사용할 수 있습니다. 그 방법은 위의 예에서 'password'와 같은 계정 속성이나 'roles'를 사용자에게 할당하여 권한이 있는 사용자가 동기화 게이트웨이에 액세스하여 원격 데이터베이스를 제어할 수 있도록 하면 됩니다. 관리자 채널 및 비밀번호는 사용 가능한 두 가지 속성입니다. 계정 속성 동기화 게이트웨이를 통해 원격 데이터베이스에 대한 사용자 액세스를 승인하는 데 사용할 수 있습니다.
다음 동기화 게이트웨이 블로그 시리즈에서는 어떻게 '채널특정 사용자가 데이터베이스에서 문서를 읽고 데이터가 라우팅되는 방식을 학습할 수 있도록 합니다.
좀 더 자세한 설명이 필요한 것 같습니다. 공개 URL에 대한 POST는 삭제하는 것이 가장 좋은 임시 세션만 가져옵니다.