SASL는 연결 지향 프로토콜에서 스포츠 토토 결과을위한 프레임 워크입니다. 현재,postgresqlSASL 인증 메커니즘 3 개 SCRAM-SHA-256, SCRAM-SHA-256-PLUS 및 OAUTHBEARER를 구현합니다. 앞으로 더 많은 것이 추가 될 수 있습니다. 아래 단계는 SASL 인증이 일반적으로 수행되는 방법을 보여주고 다음 하위 섹션은 특정 메커니즘에 대한 자세한 내용을 제공합니다.
SASL 인증 메시지 흐름
SASL 인증 교환을 시작하려면 서버는 AuthenticationSASL 메시지를 보냅니다. 서버가 서버가 선호하는 순서로 서버가 수락 할 수있는 SASL 인증 메커니즘 목록이 포함되어 있습니다.
클라이언트는 목록에서 지원되는 메커니즘 중 하나를 선택하고 SaslinitialResponse 메시지를 서버로 보냅니다. 메시지에는 선택한 메커니즘의 이름과 선택한 메커니즘이 사용하는 경우 선택적 초기 클라이언트 응답이 포함됩니다.
하나 이상의 Server-Challenge 및 Client-Response 메시지가 다음과 같습니다. 각 서버 challenge는 authenticationsAlContinue 메시지로 전송되며 SASLRESPONSE 메시지에서 클라이언트의 응답이 이어집니다. 메시지의 세부 사항은 메커니즘에 따라 다릅니다.
마지막으로, 스포츠 토토 결과 교환이 성공적으로 완료되면 서버는 옵션 인 AuthenticationSaslfinal 메시지를 보냅니다. AuthenticationSaslfinal에는 추가 서버-클라이언트 데이터가 포함되어 있으며 컨텐츠는 선택한 스포츠 토토 결과 메커니즘에만 해당됩니다. 스포츠 토토 결과 메커니즘이 완료시 전송 된 추가 데이터를 사용하지 않으면 AuthenticationSaslfinal 메시지가 전송되지 않습니다.
오류가 발생하여 서버는 모든 단계에서 스포츠 토토 결과을 중단하고 errormessage를 보낼 수 있습니다.
Scram-Sha-256
및 채널 바인딩과의 변형Scram-Sha-256-Plus
, 비밀번호 기반 스포츠 토토 결과 메커니즘입니다. 그들은에 자세히 설명되어 있습니다.RFC 7677andRFC 5802.
Scram-Sha-256이 PostgreSQL에서 사용되면 서버는 클라이언트가 |를 보내는 사용자 이름을 무시합니다.Client-First-Message
. 시작 메시지에서 이미 전송 된 사용자 이름이 대신 사용됩니다.PostgreSQL다중 문자 인코딩을 지원하는 반면 SCRAM은 UTF-8을 사용자 이름에 사용하도록 지시하므로 UTF-8에서 PostgreSQL 사용자 이름을 나타내는 것은 불가능할 수 있습니다..
SCRAM 사양은 암호가 UTF-8에 있으며로 처리됩니다.SASLPREP알고리즘.PostgreSQL그러나 비밀번호에 UTF-8을 사용하려면 필요하지 않습니다. 사용자의 비밀번호가 설정되면 실제 인코딩에 관계없이 UTF-8 인 것처럼 SASLPREP로 처리됩니다. 그러나 합법적 인 UTF-8 바이트 시퀀스가 아니거나 SASLPREP 알고리즘에 의해 금지되는 UTF-8 바이트 시퀀스가 포함되어 있으면 오류를 던지는 대신 SASLPREP 처리없이 원시 암호를 사용합니다. 이렇게하면 UTF-8에있을 때 비밀번호를 정규화 할 수 있지만 여전히 UTF-8 비 암호를 사용할 수 있으며 시스템이 어떤 인코딩인지 알 필요가 없습니다..
채널 바인딩SSL 지원을 통해 PostgreSQL 빌드에서 지원됩니다. 채널 바인딩이있는 SCRAM의 SASL 메커니즘 이름은Scram-Sha-256-Plus
. PostgreSQL에서 사용하는 채널 바인딩 유형은입니다.TLS-Server-End-Point
.
inScram채널 바인딩이 없으면 서버는 전송 된 암호 해시에서 사용자가 공급 한 암호와 혼합되도록 클라이언트에게 전송되는 임의의 숫자를 선택합니다. 이로 인해 암호 해시가 이후 세션에서 성공적으로 재전송하는 것을 방지하지만 실제 서버와 클라이언트 간의 가짜 서버가 서버의 임의 값을 통과하고 성공적으로 인증하는 것을 방지하지는 않습니다..
Scram채널 바인딩과 함께 서버 인증서의 서명을 전송 된 암호 해시에 혼합하여 이러한 중간 공격을 방지합니다. 가짜 서버는 실제 서버의 인증서를 되돌릴 수 있지만 해당 인증서 일치하는 개인 키에 액세스 할 수 없으므로 소유자임을 증명할 수 없으므로 SSL 연결 고장을 유발합니다..
example
서버는 authenticationsAsl 메시지를 보냅니다. 여기에는 서버가 수락 할 수있는 SASL 인증 메커니즘 목록이 포함되어 있습니다. 이건Scram-Sha-256-Plus
andScram-Sha-256
서버가 SSL 지원으로 구축 된 경우, 그렇지 않으면 후자입니다.
클라이언트는 saslinitialResponse 메시지를 보내서 응답합니다.SCRAM-SHA-256
또는Scram-Sha-256-Plus
. (클라이언트는 메커니즘 중 하나를 자유롭게 선택할 수 있지만 보안을 개선하려면 채널 바인딩 변형을 지원할 수있는 경우 선택해야합니다.) 초기 클라이언트 응답 필드에 메시지에는 SCRAM이 포함되어 있습니다.Client-First-Message
. 그만큼Client-First-Message
또한 클라이언트가 선택한 채널 바인딩 유형을 포함합니다.
서버는 Scram과 함께 authenticationsAlcontinue 메시지를 보냅니다Server-First-Message
내용으로.
클라이언트는 scram과 함께 saslresponse 메시지를 보냅니다Client-Final-Message
내용으로.
서버는 scram과 함께 authenticationsaslfinal 메시지를 보냅니다Server-Final-Message
, 즉시 Authenticationok 메시지가 있습니다.
Oauthbearer
는 연합 스포츠 토토 결과을위한 토큰 기반 메커니즘입니다. 에 자세히 설명되어 있습니다.RFC 7628.
일반적인 교환은 클라이언트가 이미 현재 사용자를 위해 베어러 토큰을 가지고 있는지 여부에 따라 다릅니다. 그렇지 않은 경우, 교환은 서버에서 OAUTH 메타 데이터를 얻기위한 첫 번째 "발견"연결과 클라이언트가 얻은 후 토큰을 보내는 두 번째 연결입니다. (LIBPQ는 현재 내장 흐름의 일부로 캐싱 방법을 구현하지 않으므로 2 연결 교환을 사용합니다.)
이 메커니즘은 SCRAM과 같이 클라이언트 개시됩니다. 클라이언트 초기 응답은 SCRAM에서 사용하는 표준 "GS2"헤더로 구성되며 목록이 이어집니다.key = value
쌍. 현재 서버에서 지원하는 유일한 키는입니다.auth
, 여기에는 Bearer 토큰이 포함되어 있습니다.Oauthbearer
클라이언트 초기 응답의 세 가지 선택 구성 요소를 추가로 지정합니다 (authzid
gs2 헤더의host
and포트
키) 현재 서버에서 무시하고 있습니다.
Oauthbearer
채널 바인딩을 지원하지 않으며 "Oauthbearer-Plus"메커니즘이 없습니다. 이 메커니즘은 성공적인 인증 중에 서버 데이터를 사용하지 않으므로 authenticationsAlfinal 메시지는 Exchange에서 사용되지 않습니다.
example
첫 번째 교환 중에 서버는 authenticationsAl 메시지를로 보냅니다.Oauthbearer
광고 된 메커니즘.
클라이언트는 saslinitialResponse 메시지를 보내서 응답합니다.Oauthbearer
메커니즘. 클라이언트에 현재 사용자에게 유효한 베어러 토큰이 없다고 가정하면auth
필드가 비어있어 발견 연결을 나타냅니다.
서버는 오류가 포함 된 메시지를 전송합니다상태
고객이 Oauth 흐름을 수행하는 데 사용해야하는 잘 알려진 URI 및 범위와 함께.
클라이언트는 빈 세트를 포함하는 saslresponse 메시지를 보냅니다 (단일0x01
byte) Discovery Exchange의 절반을 완료하려면
서버는 첫 번째 교환에 실패하기 위해 errormessage를 보냅니다.
이 시점에서 클라이언트는 서버가 제공 한 것과 함께 구성된 메타 데이터를 사용하여 베어러 토큰을 얻기 위해 가능한 많은 OAuth 흐름 중 하나를 수행합니다. (이 설명은 의도적으로 모호합니다.Oauthbearer
토큰을 얻는 특정 방법을 지정하거나 명령하지 않습니다.)
일단 토큰이 있으면 클라이언트는 최종 교환을 위해 서버와 다시 연결됩니다.
서버는 다시 한 번 authenticationsAl 메시지를로 보냅니다.Oauthbearer
메커니즘 광고.
클라이언트는 saslinitialResponse 메시지를 보내서 응답하지만 이번에는auth
메시지의 필드에는 클라이언트 흐름 중에 얻은 베어러 토큰이 포함되어 있습니다.
서버는 토큰 공급자의 지침에 따라 토큰을 검증합니다. 클라이언트가 연결 권한이있는 경우 SASL Exchange를 종료하기 위해 Authenticationok 메시지를 보냅니다.