54.3. SASL 롤 토토#

SASL은 연결 지향 프로토콜의 롤 토토을 위한 프레임워크입니다. 현재는,포스트그레SQLSCRAM-SHA-256, SCRAM-SHA-256-PLUS 및 OAUTHBEARER의 세 가지 SASL 롤 토토 메커니즘을 구현합니다. 앞으로는 더 많은 내용이 추가될 수 있습니다. 아래 단계에서는 SASL 롤 토토이 일반적으로 수행되는 방식을 보여주고, 다음 하위 섹션에서는 특정 메커니즘에 대해 더 자세히 설명합니다.

SASL 롤 토토 메시지 흐름

  1. SASL 롤 토토 교환을 시작하기 위해 서버는 AuthenticationSASL 메시지를 보냅니다. 여기에는 서버가 허용할 수 있는 SASL 롤 토토 메커니즘 목록이 서버의 기본 순서대로 포함되어 있습니다.

  2. 클라이언트는 목록에서 지원되는 메커니즘 중 하나를 선택하고 SASLInitialResponse 메시지를 서버에 보냅니다. 메시지에는 선택한 메커니즘의 이름과 선택적인 초기 클라이언트 응답(선택한 메커니즘에서 이를 사용하는 경우)이 포함됩니다.

  3. 하나 이상의 서버 도전과 클라이언트 응답 메시지가 이어질 것입니다. 각 서버 챌린지는 AuthenticationSASLContinue 메시지로 전송되고 이어서 SASLResponse 메시지로 클라이언트의 응답이 전송됩니다. 메시지의 세부 사항은 메커니즘에 따라 다릅니다.

  4. 마지막으로 롤 토토 교환이 성공적으로 완료되면 서버는 선택적 AuthenticationSASLFinal 메시지를 보낸 후 바로 AuthenticationOk 메시지를 보냅니다. AuthenticationSASLFinal에는 선택한 롤 토토 메커니즘에 특정한 콘텐츠를 포함하는 추가 서버-클라이언트 데이터가 포함되어 있습니다. 롤 토토 메커니즘이 완료 시 전송되는 추가 데이터를 사용하지 않는 경우 AuthenticationSASLFinal 메시지가 전송되지 않습니다.

오류가 발생하면 서버는 어느 단계에서나 롤 토토을 중단하고 ErrorMessage를 보낼 수 있습니다.

54.3.1. SCRAM-SHA-256 롤 토토#

SCRAM-SHA-256및 채널 바인딩이 있는 변형SCRAM-SHA-256-PLUS는 비밀번호 기반 롤 토토 메커니즘입니다. 자세한 내용은RFC 7677그리고RFC 5802.

SCRAM-SHA-256이 PostgreSQL에서 사용될 때 서버는 클라이언트가 보내는 사용자 이름을 무시합니다.클라이언트 우선 메시지. 시작 메시지에서 이미 전송된 사용자 이름이 대신 사용됩니다.PostgreSQL여러 문자 인코딩을 지원하는 반면 SCRAM은 사용자 이름으로 utf-8을 사용하도록 지시하므로 PostgreSQL 사용자 이름을 utf-8로 표현하는 것이 불가능할 수 있습니다.

SCRAM 사양에 따르면 비밀번호도 utf-8에 있으며 다음과 같이 처리됩니다.SASLprep알고리즘.포스트그레SQL11718_12316

채널 바인딩은 SSL을 지원하는 PostgreSQL 빌드에서 지원됩니다. 채널 바인딩이 있는 SCRAM의 SASL 메커니즘 이름은 다음과 같습니다.SCRAM-SHA-256-PLUS. PostgreSQL에서 사용하는 채널 바인딩 유형은 다음과 같습니다.tls-서버-엔드포인트.

스크램채널 바인딩 없이 서버는 전송된 비밀번호 해시에서 사용자가 제공한 비밀번호와 혼합되도록 클라이언트에 전송되는 임의의 숫자를 선택합니다. 이렇게 하면 비밀번호 해시가 이후 세션에서 성공적으로 재전송되는 것을 방지할 수 있지만 실제 서버와 클라이언트 사이의 가짜 서버가 서버의 임의 값을 통과하여 성공적으로 롤 토토하는 것을 방지할 수는 없습니다.

스크램채널 바인딩을 사용하면 서버 롤 토토서의 서명을 전송된 비밀번호 해시에 혼합하여 중간자 공격을 방지할 수 있습니다. 가짜 서버는 실제 서버의 롤 토토서를 재전송할 수 있지만 해당 롤 토토서와 일치하는 개인 키에 액세스할 수 없으므로 자신이 소유자임을 증명할 수 없어 SSL 연결 실패가 발생합니다.

  1. 서버가 AuthenticationSASL 메시지를 보냅니다. 여기에는 서버가 수락할 수 있는 SASL 롤 토토 메커니즘 목록이 포함됩니다. 이것은 다음과 같습니다SCRAM-SHA-256-PLUS그리고SCRAM-SHA-256서버가 SSL 지원으로 구축된 경우 아니면 후자입니다.

  2. 클라이언트는 선택한 메커니즘을 나타내는 SASLInitialResponse 메시지를 보내 응답합니다.SCRAM-SHA-256또는SCRAM-SHA-256-PLUS. (클라이언트는 두 메커니즘 중 하나를 자유롭게 선택할 수 있지만 더 나은 보안을 위해 지원할 수 있는 경우 채널 바인딩 변형을 선택해야 합니다.) 초기 클라이언트 응답 필드의 메시지에는 SCRAM이 포함되어 있습니다.클라이언트 우선 메시지.클라이언트 우선 메시지또한 클라이언트가 선택한 채널 바인딩 유형을 포함합니다.

  3. 서버가 SCRAM과 함께 AuthenticationSASLContinue 메시지를 보냅니다.서버 우선 메시지콘텐츠로.

  4. 클라이언트가 SCRAM과 함께 SASLResponse 메시지를 보냅니다.클라이언트-최종-메시지콘텐츠로.

  5. 서버가 SCRAM과 함께 AuthenticationSASLFinal 메시지를 보냅니다.서버-최종-메시지, 바로 뒤에 AuthenticationOk 메시지가 옵니다.

54.3.2. OAUTHBEARER 롤 토토#

OAUTHBEARER은 연합 롤 토토을 위한 토큰 기반 메커니즘입니다. 에 자세히 설명되어 있습니다.RFC 7628.

일반적인 교환은 클라이언트가 현재 사용자에 대해 캐시된 전달자 토큰을 이미 가지고 있는지 여부에 따라 다릅니다. 그렇지 않은 경우 교환은 두 개의 연결, 즉 서버에서 OAuth 메타데이터를 얻기 위한 첫 번째 "검색" 연결과 클라이언트가 토큰을 얻은 후 토큰을 보내는 두 번째 연결을 통해 이루어집니다. (libpq는 현재 내장 흐름의 일부로 캐싱 방법을 구현하지 않으므로 두 연결 교환을 사용합니다.)

이 메커니즘은 SCRAM처럼 클라이언트에서 시작됩니다. 클라이언트 초기 응답은 SCRAM에서 사용하는 표준 "GS2" 헤더와 그 뒤에 오는키=값쌍. 현재 서버에서 지원하는 유일한 키는롤 토토, 베어러 토큰이 포함되어 있습니다.OAUTHBEARER추가로 클라이언트 초기 응답의 세 가지 선택적 구성 요소를 지정합니다(롤 토토GS2 헤더 및호스트그리고포트키)는 현재 서버에서 무시됩니다.

OAUTHBEARER은 채널 바인딩을 지원하지 않으며 "OAUTHBEARER-PLUS" 메커니즘이 없습니다. 이 메커니즘은 성공적인 롤 토토 중에 서버 데이터를 사용하지 않으므로 AuthenticationSASLFinal 메시지는 교환에 사용되지 않습니다.

  1. 첫 번째 교환 동안 서버는 다음과 함께 AuthenticationSASL 메시지를 보냅니다.OAUTHBEARER메커니즘이 광고되었습니다.

  2. 클라이언트는 다음을 나타내는 SASLInitialResponse 메시지를 보내 응답합니다.OAUTHBEARER메커니즘. 클라이언트가 현재 사용자에 대한 유효한 전달자 토큰을 아직 가지고 있지 않다고 가정하면,롤 토토필드가 비어 있어 검색 연결을 나타냅니다.

  3. 서버가 오류가 포함된 AuthenticationSASLContinue 메시지를 보냅니다.상태클라이언트가 OAuth 흐름을 수행하기 위해 사용해야 하는 잘 알려진 URI 및 범위와 함께.

  4. 클라이언트는 빈 세트(단일0x01byte) 발견 교환의 절반을 완료합니다.

  5. 서버가 첫 번째 교환에 실패하기 위해 ErrorMessage를 보냅니다.

    이 시점에서 클라이언트는 서버에서 제공한 메타데이터 외에 구성된 메타데이터를 사용하여 베어러 토큰을 얻기 위해 가능한 많은 OAuth 흐름 중 하나를 수행합니다. (이 설명은 의도적으로 모호하게 남겨졌습니다.OAUTHBEARER토큰을 얻기 위한 특정 방법을 지정하거나 의무화하지 않습니다.)

    토큰이 있으면 클라이언트는 최종 교환을 위해 서버에 다시 연결합니다.

  6. 서버는 다시 한번 다음과 함께 AuthenticationSASL 메시지를 보냅니다.OAUTHBEARER메커니즘이 광고되었습니다.

  7. 클라이언트는 SASLInitialResponse 메시지를 보내 응답하지만 이번에는롤 토토메시지의 필드에는 클라이언트 흐름 중에 얻은 전달자 토큰이 포함되어 있습니다.

  8. 서버는 토큰 공급자의 지시에 따라 토큰을 검증합니다. 클라이언트에 연결 권한이 부여되면 SASL 교환을 종료하기 위해 AuthenticationOk 메시지를 보냅니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.