카우치베이스 모바일

Couchbase Mobile v1.3의 새로운 기능: OpenID 연결

이 게시물에서는 다음과 같은 중요한 새 기능에 대해 설명하려고 합니다. 카우치베이스 모바일 버전 1.3, OpenID 연결 (OIDC) 지원.

OpenID Connect Logo

소개

카우치베이스 모바일에는 여러 가지 중요한 보안 기능이 있습니다. 동기화 게이트웨이는 Couchbase Lite가 Couchbase Server에 데이터를 복제할 수 있도록 하는 중개자 역할을 합니다. 당연히 많은 애플리케이션이 사용자를 인증하고 동기화 게이트웨이를 통해 사용자가 수행할 수 있는 작업을 제어하려고 합니다. OpenID Connect는 인증 추가를 간소화하고, 개발자에게 통합 옵션을 크게 향상시키며, 필요한 인프라를 지원해야 하는 번거로움을 덜어주는 옵션을 제공합니다.

목표

조금 더 명확히 설명하겠습니다. 일반적인 시나리오에서 애플리케이션은 Couchbase Lite를 기본 데이터 저장소로 사용합니다. 정보는 로컬 데이터베이스에서 읽거나 로컬 데이터베이스에 기록됩니다. 애플리케이션은 클라우드에서 실행 중인 동기화 게이트웨이 인스턴스를 통해 백엔드 서버로의 복제를 설정합니다.

애플리케이션 개발자는 데이터를 고유하고 검증 가능한 ID에 연결하고자 하는 경우가 많습니다. ID의 세부 사항은 중요하지 않습니다. 인프라 관리는 불필요한 오버헤드가 됩니다. OpenID Connect는 이를 다른 신뢰할 수 있는 소스로 오프로드할 수 있는 방법을 제공합니다.

모든 액터를 설명해 보겠습니다. 사용자, 애플리케이션, Couchbase Lite(애플리케이션에 통합됨), 동기화 게이트웨이 인스턴스 및 OP(OpendID 공급자)가 있습니다.

동기화 게이트웨이는 복제 중 변경사항에 대한 권한 부여를 제어합니다. 따라서 사용자가 OP에 자신을 인증하여 애플리케이션에 로그인하도록 하는 것이 목표입니다. 그러면 애플리케이션이 동기화 게이트웨이에 사용자 신원 증명을 제공하는 데 사용할 수 있는 정보를 OP에 다시 제공합니다. 이를 위한 모든 단계를 살펴보겠습니다.

OpendID 연결

사용자가 계정을 만들어야 하는 서비스도 이미 많이 존재합니다. 하지만 OpenID 재단 는 이러한 시스템의 인증 부분을 외부에서 사용할 수 있도록 개방하는 표준을 구축하기 위해 결성되었습니다. 이러한 노력으로 OpenID Connect 사양이 만들어졌습니다. OpenID 재단의 말을 빌리자면

OpenID 연결 는 OAuth 2.0 사양 제품군에 기반한 상호 운용 가능한 인증 프로토콜입니다. "단순한 것을 단순하게, 복잡한 것을 가능하게"라는 설계 목표에 따라 간단한 REST/JSON 메시지 흐름을 사용합니다. 개발자가 이전의 어떤 ID 프로토콜과 비교해도 통합하기가 매우 쉽습니다.

OpenID Connect에 대해 자세히 알아보려면 위의 링크를 참조하세요. 또한 이 글 가치.

흐름

OpenID Connect는 세 가지 가능한 '흐름'을 따릅니다. 플로우는 프로토콜의 앞뒤 단계와 필요한 매개변수와 그 의미에 대한 모든 세부 사항을 지정합니다. 여기서는 인증 코드 흐름(인증 흐름)에 대해 설명하겠습니다. 인증 플로우는 새로 고침 기능을 설정하므로 사용자가 너무 자주 로그인하는 것을 귀찮게 하고 싶지 않다면 이 플로우를 사용하는 것이 좋습니다.

Couchbase는 OpendID Connect의 복잡성을 상당 부분 추상화하기 위해 클래스를 구현했습니다. Couchbase Lite의 다른 부분과 마찬가지로 인증 클래스는 특히 네트워크 호출을 비롯한 많은 부분을 백그라운드에서 처리합니다.

하지만 전체 코드 샘플은 블로그 게시물 하나에 담기에는 너무 많은 양입니다. 간단한 예제를 제공하겠습니다. 전체 애플리케이션을 보려면 아래의 GrocerySync 프로젝트를 살펴보세요. 카우치바스랩 를 찾아보세요. 다음 링크는 다음과 같습니다. Android 그리고 iOS. (이 글을 쓰는 시점에서는 오픈아이디 브랜치로 전환해야 합니다.)

Android 앱에서 인증을 구현하는 주요 단계를 살펴보겠습니다. Google을 OpenID 공급자(OP)로 사용하겠습니다.

Android에서는 직접 구현할 수 있습니다. Google 로그인 클라이언트 라이브러리를 사용하거나 Couchbase Lite에 내장된 래퍼를 사용하세요. 여기서는 Couchbase Lite 래퍼를 사용하겠습니다. 기본 코드를 더 잘 이해하려면 OpenID Connect 구현에 대한 Google의 문서를 확인하는 것이 좋습니다. 여기에서 찾을 수 있습니다. 여기.

복제

Couchbase에서는 데이터베이스 변경 사항 동기화를 복제라고 합니다. 인증이 복제와 밀접한 관련이 있는 것은 당연한 일입니다. 간단히 말해, 동기화하려면 복제 개체를 만들고 몇 가지 옵션을 설정한 다음 원샷 또는 연속 모드로 실행하면 됩니다.

일반적으로 인증은 인증자 개체를 생성하고 이를 복제 개체에 할당합니다. 카우치베이스 라이트에는 다양한 유형의 인증자를 만들기 위한 팩토리가 있습니다. 리플리케이션에 대한 자세한 내용은 리플리케이션을 참조하세요, 복제 객체 및 인증자 여기.

코드

간단한 예제 앱에서 첫 번째 활동 를 실행하면 로그인 버튼과 로그아웃 버튼 두 개가 표시됩니다. 저는 이것을 메인 활동이라고 부르겠습니다. 사용자가 로그인하지 않은 경우 로그인 버튼을 클릭하면 로그인 프로세스를 처리하는 웹 보기가 있는 활동이 시작됩니다. 이를 로그인 활동이라고 부르겠습니다. 자격 증명 저장은 기본 활동으로 돌아간 후에 이루어집니다.

이 강령은 이 두 가지 활동에 걸쳐 세 가지 주요 섹션으로 구성되어 있습니다.

복제 준비

복제에는 '방향'이 있습니다. 풀 복제는 동기화 게이트웨이에서 데이터를 전송하는 반면, 푸시는 데이터를 동기화 게이트웨이로 전송합니다. 여기서는 인증 부분을 강조하기 위해 풀 복제를 설정했습니다. 코드는 분리되어 있지만 다음과 같은 동안 호출됩니다. onCreate 를 기본 활동으로 설정합니다.

저희의 목적상 가장 중요한 부분은 인증자를 만드는 것입니다. 코드 줄의 길이에 속지 마세요. 매우 간단합니다. 코드를 안쪽에서 바깥쪽으로 살펴보는 것이 도움이 될 수 있습니다.

본문을 살펴보십시오. 콜백 메서드를 사용합니다. 세 개의 입력 매개변수가 필요합니다. 하나는 나중에 사용할 수 있도록 저장합니다. 두 개는 의도. 이 인텐트는 로그인 활동을 시작하고 결과를 받도록 요청합니다.

OpenID에서 필요로 하는 방식으로 URL을 구성하는 모든 작업이 완료되었습니다. 예를 들어 로그인 URL을 확인해보니 400자가 훨씬 넘는 길이에 15개 이상의 매개변수가 있었습니다! 네트워크 호출 등을 관리하는 OAuth 2 플로우를 직접 구현해 본 결과, 확실히 이 기능이 훨씬 더 좋다고 말할 수 있습니다.

나중에 동기화 게이트웨이 구성이 이 흐름에 어떻게 적용되는지 살펴보겠습니다. 현재로서는 URL을 살펴보면 동기화 게이트웨이가 복제의 초기 미인증 킥오프에 대한 응답으로 일부를 제공한다는 것을 알 수 있습니다.

콜백 메서드의 세 번째 매개 변수( OIDCL로그인연속 인터페이스 구현)는 카우치베이스 라이트에서 제공합니다. 이것은 로그온 결과를 다시 전달하는 데 사용하는 훅입니다. 잠시 후에 더 자세히 살펴보겠습니다.

로그인 활동

짐작할 수 있듯이, 많은 OpenID 공급업체는 웹 페이지에서 작동합니다. 로그인 활동은 표준 웹 보기로 구성됩니다. (웹 보기를 사용하면 보안에 중대한 영향을 미칩니다. 자세한 내용은 마지막에 있는 보안에 대한 특별 참고 사항을 참조하세요.) 탐색을 설정하고 JavaScript를 활성화해야 합니다. 이에 대한 자세한 내용은 안드로이드 웹 앱 빌드 가이드. URL 로딩을 가로채는 방법만 자세히 살펴볼 필요가 있습니다. 다음은 코드입니다.

(참고 Android 스튜디오에서 다음과 같은 경고가 표시될 수 있습니다. shouldOverrideUrlLoading 더 이상 사용되지 않습니다. 이 글을 쓰는 현재 이 버전은 여전히 가장 널리 지원되고 있습니다.)

제공하는 경우 웹뷰클라이언트를 사용하여 모든 새 페이지 로드를 연결합니다. OpenID는 인증 시도 결과를 다시 한 번 여러 매개 변수가 포함된 URL 형식으로 인코딩합니다. 우리의 웹뷰클라이언트 는 리디렉션 URL을 발견할 때까지 기다렸다가 이를 패키징한 후 로그인 활동을 종료하고 다시 기본 활동으로 돌아갑니다. 진행률 표시줄과 같은 추가 기능을 추가하기 위해 비동기 작업으로 이 작업을 처리하는 것을 고려할 수 있습니다.

마무리

로그인 활동은 응답 URL을 다시 기본 활동으로 전달합니다. 인증 프로세스를 완료하기 위해(자격 증명 저장 포함) Couchbase Lite는 자체 콜백을 제공하며, 이 콜백은 다음과 같이 구현됩니다. OIDCL로그인연속 인터페이스입니다. 이 인터페이스는 두 개의 인자, 결과 URL 및 예외를 받습니다. 코드 스니펫의 주석은 널 값과 널이 아닌 값의 조합이 성공 또는 기타 결과를 나타내는 방법을 포함하여 인수의 의미를 설명합니다.

설명을 위해 오류를 간단하게 처리했습니다. 좀 더 정교하게 처리하고 싶을 것입니다. 문제가 발생하면 응답 URL에 오류 정보를 포함할 수 있습니다. 이를 사용하여 사용자에게 무엇이 실패했는지에 대한 자세한 인사이트를 제공할 수 있습니다.

앱 코드 요약

Couchbase Lite 클래스를 사용하면 매우 간단한 흐름이 있습니다. 인증자를 설정하고 이를 복제에 연결합니다. 사용자 작업(예: 로그인 버튼 클릭)에 대한 응답으로 복제를 시작합니다.

인증자는 미리 형성된 세 가지 요소, 두 개의 URL 및 Couchbase Lite에서 제공하는 콜백과 함께 제어권을 다시 넘겨줍니다. 원하는 대로 인증을 진행합니다. 마지막으로 받은 콜백을 호출하여 마무리해야 합니다.

팁 및 유용한 정보

사용자 ID

코드에는 표시하지 않았지만 OpenID 응답의 정보를 기반으로 일종의 사용자 ID를 할당하고 싶을 때가 많습니다. 예를 들어 이 ID를 사용하여 문서를 필터링하는 동기화 게이트웨이 채널을 만들 수 있습니다.

로그아웃

복제본에서 자격 증명을 지울 수 있습니다.clearAuthenticationStores 메서드를 사용하세요. 웹 보기를 사용하는 경우 세션 쿠키를 제거할 수도 있습니다. 이 코드 스니펫은 Android API 21 이상에서 이를 수행하는 방법을 보여줍니다.

테스트

에뮬레이터와 동일한 컴퓨터에서 실행 중인 동기화 게이트웨이 인스턴스를 사용하여 코드를 테스트할 수 있습니다. Android와 함께 제공되는 에뮬레이터나 Genymotion에서 제공하는 에뮬레이터와 같은 일반적인 에뮬레이터를 사용하면 특별한 IP 주소를 사용하여 컴퓨터의 서비스에 연결할 수 있습니다. 하지만 Google의 OP는 종종 이러한 URL을 거부합니다. 저는 동기화 게이트웨이가 로컬호스트를 주소로 지정하는 트릭을 사용했습니다. 그런 다음 onActivityResult 호출할 때 에뮬레이터에 필요한 IP 주소를 이 줄로 대체합니다:

동기화 게이트웨이 구성

애플리케이션 코드 작성은 끝났습니다. OIDC를 사용하도록 동기화 게이트웨이를 구성하는 방법에 대해 간략히 살펴보겠습니다. 이 샘플 구성은 GoogleAuthFlow를 공급자로 구성하는 방법을 보여줍니다. 프로덕션 환경에서는 고유한 client_id 및 validation_key를 생성해야 합니다. 이 구성은 Google 문서 및 링크 를 참조하세요. 동기화 게이트웨이에 대한 자세한 내용과 구성 방법은 Couchbase 문서에서 확인하세요. 여기.

특별 참고 사항 - 보안

이 블로그에서는 인증 프로세스의 일부로 웹 보기를 사용하는 방법에 대해 설명합니다. 이 방식에는 앱이 인증 프로세스를 도청할 수 있는 가능성을 포함하여 단점이 있습니다. 보안을 강화하려면 대신 시스템 브라우저를 사용하는 것이 좋습니다. 자세한 내용은 최신 버전의 다음 문서를 참조하세요. IETF 인터넷 초안. 보안은 움직이는 목표가 되는 경향이 있습니다. 매우 민감한 정보를 다루고 있다면 시간을 내어 최신 모범 사례를 읽어보세요.

포스트 스크립트

더 많은 리소스를 확인하세요. 개발자 포털 트위터에서 팔로우하세요 카우치베이스 개발.

질문에 대한 답변을 게시할 수 있습니다. 포럼. 그리고 다음에도 적극적으로 참여합니다. 스택 오버플로.

다음 주소에서 저를 개인적으로 팔로우할 수 있습니다. 호드그릴리

이 문서 공유하기
받은 편지함에서 카우치베이스 블로그 업데이트 받기
이 필드는 필수 입력 사항입니다.

작성자

게시자 호드 그릴리, 개발자 옹호자, 카우치베이스

호드 그레이리는 실리콘밸리에 거주하는 카우치베이스의 개발자 옹호자입니다. 그는 소프트웨어 엔지니어 및 엔지니어링 관리자로서 20년 이상의 경력을 보유하고 있습니다. 그는 전산 물리학 및 화학, 컴퓨터 및 네트워크 보안, 금융, 모바일 등 다양한 소프트웨어 분야에서 일해 왔습니다. 2016년 카우치베이스에 합류하기 전에는 삼성에서 모바일 개발자 관계를 이끌었습니다. 컬럼비아 대학교에서 화학 물리학 박사 학위를 받았습니다.

댓글 남기기

카우치베이스 카펠라를 시작할 준비가 되셨나요?

구축 시작

개발자 포털에서 NoSQL을 살펴보고, 리소스를 찾아보고, 튜토리얼을 시작하세요.

카펠라 무료 사용

클릭 몇 번으로 Couchbase를 직접 체험해 보세요. Capella DBaaS는 가장 쉽고 빠르게 시작할 수 있는 방법입니다.

연락하기

카우치베이스 제품에 대해 자세히 알고 싶으신가요? 저희가 도와드리겠습니다.