개발 버전 :Devel
이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다현재버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

32.20. OAUTH 지원#

LIBPQ는 OAUTH V2 장치 인증 클라이언트 흐름에 대한 지원을 구현합니다.RFC 8628, 서버 인 경우 기본적으로 사용하려고 시도합니다PostgreSQL : 문서인증 중. 클라이언트 애플리케이션을 실행하는 시스템에 사용 가능한 웹 브라우저가없는 경우 에도이 흐름을 활용할 수 있습니다.SSH. 클라이언트 응용 프로그램은 대신 자체 흐름을 구현할 수 있습니다.섹션 32.20.1.

내장 흐름은 기본적으로 방문 할 URL과 여기에 입력 할 사용자 코드를 인쇄합니다.

$ psql 'dbname = postgres 토토 핫_issuer = https : //example.com 토토 핫_client_id = ...'

(이 프롬프트가 될 수 있습니다사용자 정의.) 그런 다음 사용자는 OAUTH 제공 업체에 로그인하여 LIBPQ와 서버가 자신을 대신하여 작업을 수행 할 수 있는지 묻습니다. 계속하기 전에 URL과 명시된 권한을 신중하게 검토하여 기대치를 일치시키기 전에 신중하게 검토하는 것이 좋습니다.

토토 핫 클라이언트 흐름을 사용할 수 있으려면 연결 문자열은 최소한으로 포함되어야합니다토토 핫_issuerand토토 핫_client_id. (이러한 설정은 조직의 토토 핫 제공 업체에 의해 결정됩니다.) 내장 흐름은 추가로 토토 핫 인증 서버가 장치 인증 엔드 포인트를 게시하도록 요구합니다..

note

내장 장치 인증 흐름은 현재 Windows에서 지원되지 않습니다. 사용자 정의 클라이언트 흐름은 여전히 ​​구현 될 수 있습니다.

32.20.1. authdata hooks#

다음 후크 API를 사용하여 클라이언트가 OAUTH 흐름의 동작을 수정하거나 대체 할 수 있습니다 :

pqsetauthdatahook #

설정pgauthdatahook, 재정의libpq'토토 핫 클라이언트 흐름의 하나 이상의 측면을 처리합니다.

void pqsetauthdatahook (pqauthdatahook_type hook);

ifhookisNULL, 기본 핸들러가 다시 설치됩니다. 그렇지 않으면 응용 프로그램은 서명이있는 콜백 함수에 대한 포인터를 전달합니다.

int hook_fn (pgauthdata 유형, pgconn *conn, void *data);

whylibpq응용 프로그램에 대한 조치가 필요할 때 호출합니다.타입요청에 대한 설명,conn연결 핸들이 인증되고 있으며데이터요청 별 메타 데이터를 가리 킵니다. 이 포인터의 내용은에 의해 결정됩니다.타입; 보다섹션 32.20.1.1지원되는 목록의 경우

훅은 협력 및/또는 폴백 행동을 허용하기 위해 함께 묶을 수 있습니다. 일반적으로 후크 구현은 들어오는 것을 조사해야합니다타입(및 잠재적으로 요청 메타 데이터 및/또는 특정 설정conn사용 중) 특정 AuthData를 처리할지 여부를 결정합니다. 그렇지 않은 경우 체인의 이전 후크에 위임해야합니다 (reachiblepqgetauthdatahook).

성공은 0보다 큰 정수를 반환하여 표시됩니다. 음의 정수를 반환하면 오류 조건을 신호하고 연결 시도를 포기합니다.

pqgetauthdatahook #

현재 값을 검색pgauthdatahook.

pqauthdatahook_type pqgetauthdatahook (void);

초기화 시간에 (첫 번째 호출 전pqsetauthdatahook),이 함수는 반환됩니다pqdefaultauthdatahook.

32.20.1.1. 후크 유형#

다음pgauthdata유형 및 해당 해당데이터구조가 정의되어 있습니다 :

pqauthdata_prompt_토토 핫_device #

내장 장치 인증 클라이언트 흐름에서 기본 사용자 프롬프트를 대체합니다.데이터인스턴스를 가리 킵니다pgprompt토토 핫device:

typedef struct _pgprompt토토 핫device

토토 핫 장치 승인 흐름에 포함libpq최종 사용자가 브라우저를 사용하여 URL을 방문한 다음 허용하는 코드를 입력해야합니다libpq대신 서버에 연결합니다. 기본 프롬프트는 단순히 인쇄합니다.verification_urianduser_code표준 오류에서. 교체 구현은 선호하는 방법 (예 : GUI)을 사용 하여이 정보를 표시 할 수 있습니다.

이 콜백은 내장 장치 인증 흐름 중에만 호출됩니다. 응용 프로그램이 a를 설치하는 경우Custom 토토 핫 흐름,이 authdata 유형은 사용되지 않습니다.

nuln이 아닌 경우verification_uri_complete가 제공되면 선택적으로 텍스트가 아닌 검증에 사용될 수 있습니다 (예 : QR 코드를 표시 함). 이 경우 URL 및 사용자 코드는 여전히 최종 사용자에게 표시되어야합니다.이 경우 코드가 공급자가 수동으로 확인하고 URL을 사용하면 비 텍스트 방법을 사용할 수없는 경우에도 URL을 계속할 수 있습니다.RFC 8628.

pqauthdata_토토 핫_bearer_token #

전체 OAuth 흐름을 사용자 정의 구현으로 대체합니다. 후크는 현재 사용자/발행자/스코프 조합에 대한 베어러 토큰을 직접 반환하거나 차단하지 않고 사용할 수 있거나 다른 콜백을 설정하여 하나를 검색해야합니다..

데이터인스턴스를 가리 킵니다pg토토 핫bearerRequest.

typedef struct pg토토 핫bearerrequest

hook에 두 개의 정보가 제공됩니다libpq: OpenID_Configuration권한 부여 서버의 지원 흐름을 설명하는 Oauth 발견 문서의 URL을 포함합니다.스코프서버에 액세스하는 데 필요한 공간 분리 된 OAUTH 스코프 목록이 포함되어 있습니다. 둘 중 하나 또는 둘 다일 수 있습니다NULL정보가 발견 할 수 없음을 나타냅니다. (이 경우 구현은 다른 미리 구성된 지식을 사용하여 요구 사항을 설정하거나 실패하기로 선택할 수 있습니다.)

후크의 최종 출력은입니다.토큰, 연결에 사용하기 위해 유효한 베어러 토큰을 가리켜 야합니다. (이 토큰은에 의해 발행되어야합니다.토토 핫_issuer요청 된 스코프를 보관하거나 서버의 유효성 검사기 모듈에 의해 연결이 거부됩니다.) 할당 된 토큰 문자열은까지 유효한 상태로 유지되어야합니다.libpq연결이 완료되었습니다. 후크는 a를 설정해야합니다.정리libpq더 이상 필요하지 않습니다.

구현이 즉시 a를 생산할 수없는 경우토큰후크로의 초기 호출 중에를 설정해야합니다.async13055_13130[16]이것은 후크에서 돌아 오는 즉시 흐름을 시작하도록 호출됩니다. 콜백이 차단하지 않고 더 많은 진전을 이룰 수 없으면 둘 중 하나를 반환해야합니다pgres_polling_reading또는pgres_polling_writing설정 후*pgsocket진행 상황을 다시 만들 수있을 때 읽고 읽을 준비가 된 파일 디스크립터로. (이 설명자는를 통해 최상위 폴링 루프에 제공됩니다pqsocket ().) 반환pgres_polling_ok설정 후토큰흐름이 완료되면 또는pgres_polling_failed실패를 나타내려면

구현은 전화에 걸쳐 부기를위한 추가 데이터를 저장할 수 있습니다asyncand정리콜백. 그만큼사용자포인터 가이 목적을 위해 제공됩니다.libpq내용은 내용을 터치하지 않으며 응용 프로그램은 편의상이를 사용할 수 있습니다. (토큰 청소 중에 할당을 해제해야합니다.)

32.20.2. 디버깅 및 개발자 설정#

환경 변수를 설정하여 "위험한 디버깅 모드"를 활성화 할 수 있습니다pg토토 핫debug = 안전하지 않은. 이 기능은 현지 개발 및 테스트의 용이성 만 제공됩니다.

  • 토토 핫 제공 업체 교환 중에 암호화되지 않은 HTTP의 사용을 허용

  • 시스템의 신뢰할 수있는 CA 목록을를 사용하여 완전히 교체 할 수 있습니다.pg토토 핫cafile환경 변수

  • 토토 핫 흐름 중에 HTTP 트래픽 (몇 가지 중요한 비밀 포함)을 표준 오류로 인쇄

  • 2 초 레트리 간격을 사용하여 클라이언트가 바쁜 루프를 만들고 무의미하게 CPU를 소비 할 수 있습니다

경고

토토 핫 흐름 트래픽의 출력을 제 3 자와 공유하지 마십시오. 여기에는 고객과 서버를 공격하는 데 사용할 수있는 비밀이 포함되어 있습니다.



[16]pqauthdata_토토 핫_bearer_token후크 콜백은 |와 같은 비 차단 연결 API를 방해합니다PQConnectPoll동시 연결이 진행되는 것을 방지합니다. 와 같은 동기 연결 프리미티브 만 사용하는 응용 프로그램PQCONNECTDB, 후크 중에 토큰을 동기 검색 할 수 있습니다.async콜백이지만 반드시 한 번에 하나의 연결로 제한됩니다.