50.3. ÐÑÑенÑиÑикаÑÐ¸Ñ SASL
SASL â ÑÑо инÑÑаÑÑÑÑкÑÑÑа аÑÑенÑиÑикаÑии Ð´Ð»Ñ Ð¿ÑоÑоколов, оÑиенÑиÑованнÑÑ Ð½Ð° ÑоединениÑ. Ðа даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Postgres Pro ÑеализÑÐµÑ ÑолÑко один Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ SASL, SCRAM-SHA-256, но в бÑдÑÑем могÑÑ Ð¿Ð¾ÑвиÑÑÑÑ Ð¸ дÑÑгие. Ðалее опиÑÑваеÑÑÑ, как в пÑинÑипе оÑÑÑеÑÑвлÑеÑÑÑ Ð°ÑÑенÑиÑикаÑÐ¸Ñ SASL, а в ÑледÑÑÑем подÑазделе более подÑобно ÑаÑÑмаÑÑиваеÑÑÑ SCRAM-SHA-256.
ÐоÑок ÑообÑений аÑÑенÑиÑикаÑии SASL
ЧÑÐ¾Ð±Ñ Ð½Ð°ÑаÑÑ Ð¾Ð±Ð¼ÐµÐ½ по ÑÑ ÐµÐ¼Ðµ аÑÑенÑиÑикаÑии SASL, ÑеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение AuthenticationSASL. Ðно ÑодеÑÐ¶Ð¸Ñ ÑпиÑок Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² аÑÑенÑиÑикаÑии SASL, Ñ ÐºÐ¾ÑоÑÑми Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ ÑеÑвеÑ, в поÑÑдке пÑедпоÑÑений ÑеÑвеÑа.
ÐÐ»Ð¸ÐµÐ½Ñ Ð²ÑбиÑÐ°ÐµÑ Ð¾Ð´Ð¸Ð½ из поддеÑживаемÑÑ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² из ÑпиÑка и пеÑедаÑÑ ÑеÑвеÑÑ ÑообÑение SASLInitialResponse. ÐÑо ÑообÑение ÑодеÑÐ¶Ð¸Ñ Ð¸Ð¼Ñ Ð²ÑбÑанного Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð° и Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Â«ÐаÑалÑнÑй оÑÐ²ÐµÑ ÐºÐ»Ð¸ÐµÐ½Ñа», еÑли ÑÑо иÑполÑзÑÐµÑ Ð²ÑбÑаннÑй Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼.
Ðа ÑÑим ÑледÑÐµÑ Ð¾Ð´Ð½Ð¾ или неÑколÑÐºÐ¸Ñ ÑообÑений вÑзова Ñо ÑÑоÑÐ¾Ð½Ñ ÑеÑвеÑа и оÑвеÑов Ñо ÑÑоÑÐ¾Ð½Ñ ÐºÐ»Ð¸ÐµÐ½Ñа. ÐÑе вÑÐ·Ð¾Ð²Ñ ÑеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ Ð² ÑообÑениÑÑ AuthenticationSASLContinue, а ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾ÑвеÑÐ°ÐµÑ Ð½Ð° Ð½Ð¸Ñ ÑообÑениÑми SASLResponse. ЧаÑÑнÑе деÑали ÑообÑений завиÑÑÑ Ð¾Ñ ÐºÐ¾Ð½ÐºÑеÑного Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð°.
ÐаконеÑ, когда обмен аÑÑенÑиÑикаÑионной инÑоÑмаÑией заканÑиваеÑÑÑ ÑÑпеÑно, ÑеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение AuthenticationSASLFinal и ÑÑÐ°Ð·Ñ Ð·Ð° ним ÑообÑение AuthenticationOk. Ð ÑообÑении AuthenticationSASLFinal пеÑедаÑÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе Ð¾Ñ ÑеÑвеÑа клиенÑÑ, ÑодеÑжимое коÑоÑÑÑ Ð¾Ð¿ÑеделÑеÑÑÑ Ð²ÑбÑаннÑм Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð¼ аÑÑенÑиÑикаÑии. ÐÑли Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ аÑÑенÑиÑикаÑии не ÑÑебÑÐµÑ Ð¿ÐµÑедаваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе даннÑе в завеÑÑение обмена, ÑообÑение AuthenticationSASLFinal опÑÑкаеÑÑÑ.
Ð ÑлÑÑае оÑибки ÑеÑÐ²ÐµÑ Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑеÑваÑÑ Ð¿ÑоÑеÑÑ Ð°ÑÑенÑиÑикаÑии на лÑбом ÑÑапе и пеÑедаÑÑ ÑообÑение ErrorMessage.
50.3.1. ÐÑÑенÑиÑикаÑÐ¸Ñ SCRAM-SHA-256
ÐÑÑенÑиÑикаÑÐ¸Ñ SCRAM-SHA-256 (далее назÑÐ²Ð°ÐµÐ¼Ð°Ñ Ð¿ÑоÑÑо SCRAM) â единÑÑвеннÑй ÑеализованнÑй на даннÑй Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼ SASL. Ðна подÑобно опиÑÑваеÑÑÑ Ð² RFC 7677 и RFC 5802.
Ðогда в Postgres Pro задейÑÑвÑеÑÑÑ SCRAM-SHA-256, ÑеÑÐ²ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑÑÐµÑ Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, коÑоÑое ÐºÐ»Ð¸ÐµÐ½Ñ Ð¿ÐµÑедаÑÑ Ð² client-first-message. ÐмеÑÑо ÑÑого иÑполÑзÑеÑÑÑ Ð¸Ð¼Ñ, пеÑеданное Ñанее в ÑÑаÑÑовом ÑообÑении. СоглаÑно ÑпеÑиÑикаÑии SCRAM, Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ бÑÑÑ Ð² UTF-8, но Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑазнÑе кодиÑовки Ñимволов, и знаÑиÑ, Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Postgres Pro не вÑегда бÑÐ´ÐµÑ Ð¿ÑедÑÑавимо в UTF-8.
Ð ÑпеÑиÑикаÑии SCRAM говоÑиÑÑÑ, ÑÑо паÑÐ¾Ð»Ñ Ñакже должен пеÑедаваÑÑÑÑ Ð² UTF-8 и обÑабаÑÑваÑÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑмом SASLprep. Ðднако Postgres Pro не ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿ÑедÑÑавлÑлÑÑ Ð² UTF-8. Ðогда ÑÑÑанавливаеÑÑÑ Ð¿Ð°ÑÐ¾Ð»Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, он обÑабаÑÑваеÑÑÑ Ð°Ð»Ð³Ð¾ÑиÑмом SASLprep как паÑÐ¾Ð»Ñ Ð² UTF-8, вне завиÑимоÑÑи Ð¾Ñ ÑакÑиÑеÑкой кодиÑовки. Ðднако еÑли он пÑедÑÑавлен недопÑÑÑимой Ð´Ð»Ñ UTF-8 поÑледоваÑелÑноÑÑÑÑ Ð±Ð°Ð¹Ñов либо ÑодеÑÐ¶Ð¸Ñ ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñии байÑов UTF-8, коÑоÑÑе не пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ Ð°Ð»Ð³Ð¾ÑиÑм SASLprep, ÑÑо не бÑÐ´ÐµÑ ÑÑиÑаÑÑÑÑ Ð¾Ñибкой â пÑи аÑÑенÑиÑикаÑии бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð¸ÑÑ Ð¾Ð´Ð½Ñй паÑолÑ, без обÑабоÑки SASLprep. ÐÑо позволÑÐµÑ Ð½Ð¾ÑмализоваÑÑ Ð¿Ð°Ñоли, пÑедÑÑавленнÑе в UTF-8, и пÑи ÑÑом иÑполÑзоваÑÑ Ð¿Ð°Ñоли не в UTF-8, а Ñакже не ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ ÑиÑÑема знала, в какой кодиÑовке задан паÑолÑ.
СвÑзÑвание Ñ ÐºÐ°Ð½Ð°Ð»Ð¾Ð¼ еÑÑ Ð½Ðµ Ñеализовано.
ÐÑимеÑ
СеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение AuthenticationSASL. Ðно ÑодеÑÐ¶Ð¸Ñ ÑпиÑок Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ð¾Ð² аÑÑенÑиÑикаÑии SASL, Ñ ÐºÐ¾ÑоÑÑми Ð¼Ð¾Ð¶ÐµÑ ÑабоÑаÑÑ ÑеÑвеÑ.
ÐÐ»Ð¸ÐµÐ½Ñ Ð² оÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение SASLInitialResponse, инÑоÑмиÑÑÑÑее о вÑбÑанном Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼Ðµ,
SCRAM-SHA-256. Рполе «ÐаÑалÑного оÑвеÑа клиенÑа» ÑÑо ÑообÑение ÑодеÑÐ¶Ð¸Ñ Ð´Ð°Ð½Ð½Ñе SCRAMclient-first-message.СеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение AuthenticationSASLContinue, ÑодеÑжаÑее даннÑе SCRAM
server-first-message.ÐÐ»Ð¸ÐµÐ½Ñ Ð¿ÐµÑедаÑÑ ÑообÑение SASLResponse, ÑодеÑжаÑее даннÑе SCRAM
client-final-message.СеÑÐ²ÐµÑ Ð¿ÐµÑедаÑÑ ÑообÑение AuthenticationSASLFinal, ÑодеÑжаÑее даннÑе SCRAM
server-final-message, и ÑÑÐ°Ð·Ñ Ð·Ð° ним ÑообÑение AuthenticationOk.