19.15. ÐвÑоÑизаÑиÑ/аÑÑенÑиÑикаÑÐ¸Ñ Ð¿Ð¾ OAuth #
OAuth 2.0 â ÑÑандаÑÑизиÑованнÑй Ð¼ÐµÑ Ð°Ð½Ð¸Ð·Ð¼, опÑеделÑннÑй в RFC 6749, коÑоÑÑй позволÑÐµÑ ÑÑоÑонним пÑиложениÑм полÑÑаÑÑ Ð¾Ð³ÑаниÑеннÑй доÑÑÑп к заÑиÑÑннÑм ÑеÑÑÑÑам.
ÐÐ»Ñ Ð¾Ð¿Ð¸ÑÐ°Ð½Ð¸Ñ ÑкоÑиÑÑÐµÐ¼Ñ OAuth в докÑменÑаÑии иÑполÑзÑÑÑÑÑ ÑледÑÑÑие ÑеÑминÑ:
- ÐÐ»Ð°Ð´ÐµÐ»ÐµÑ ÑеÑÑÑÑа (или конеÑнÑй полÑзоваÑелÑ)
ÐолÑзоваÑÐµÐ»Ñ Ð¸Ð»Ð¸ ÑиÑÑема, коÑоÑÐ°Ñ Ð²Ð»Ð°Ð´ÐµÐµÑ Ð·Ð°ÑиÑÑннÑми ÑеÑÑÑÑами и Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑедоÑÑавлÑÑÑ Ð´Ð¾ÑÑÑп к ним. РдокÑменÑаÑии Ñакже иÑполÑзÑеÑÑÑ ÑеÑмин конеÑнÑй полÑзоваÑелÑ, еÑли владелÑÑем ÑеÑÑÑÑа ÑвлÑеÑÑÑ Ñеловек. ÐÑли Ð´Ð»Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑÐµÐ½Ð¸Ñ Ðº ÐРпо OAuth иÑполÑзÑеÑÑÑ psql, Ð²Ñ ÑвлÑеÑеÑÑ Ð²Ð»Ð°Ð´ÐµÐ»ÑÑем ÑеÑÑÑÑа/конеÑнÑм полÑзоваÑелем.
- ÐлиенÑ
СиÑÑема, коÑоÑÐ°Ñ Ð¾Ð±ÑаÑаеÑÑÑ Ðº заÑиÑÑннÑм ÑеÑÑÑÑам, иÑполÑзÑÑ ÑÐ¾ÐºÐµÐ½Ñ Ð´Ð¾ÑÑÑпа. ÐÑиложениÑ, иÑполÑзÑÑÑие libpq, напÑÐ¸Ð¼ÐµÑ psql, ÑвлÑÑÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñами OAuth пÑи подклÑÑении к клаÑÑеÑÑ Postgres Pro.
- СеÑÐ²ÐµÑ ÑеÑÑÑÑа
СиÑÑема, где ÑазмеÑÐµÐ½Ñ Ð·Ð°ÑиÑÑннÑе ÑеÑÑÑÑÑ, к коÑоÑÑм обÑаÑаеÑÑÑ ÐºÐ»Ð¸ÐµÐ½Ñ. СеÑвеÑом ÑеÑÑÑÑа ÑвлÑеÑÑÑ ÐºÐ»Ð°ÑÑÐµÑ Postgres Pro, к коÑоÑÐ¾Ð¼Ñ Ð¿ÑоиÑÑ Ð¾Ð´Ð¸Ñ Ð¿Ð¾Ð´ÐºÐ»ÑÑение.
- ÐоÑÑавÑик
ÐÑганизаÑиÑ, поÑÑавÑик пÑодÑкÑа или иной ÑÑбÑекÑ, коÑоÑÑй ÑазÑабаÑÑÐ²Ð°ÐµÑ Ð¸/или админиÑÑÑиÑÑÐµÑ ÑеÑвеÑÑ Ð¸ клиенÑÑ Ð°Ð²ÑоÑизаÑии OAuth Ð´Ð»Ñ Ð¾Ð¿ÑеделÑнного пÑиложениÑ. РазнÑе поÑÑавÑики обÑÑно вÑбиÑаÑÑ ÑазнÑе ÑпоÑÐ¾Ð±Ñ ÑеализаÑии ÑÐ²Ð¾Ð¸Ñ OAuth-ÑиÑÑем. Ðак пÑавило, не гаÑанÑиÑÑеÑÑÑ, ÑÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ поÑÑавÑика ÑÐ¼Ð¾Ð¶ÐµÑ Ð¾Ð±ÑаÑаÑÑÑÑ Ðº ÑеÑвеÑам дÑÑгого поÑÑавÑика.
ÐÑполÑзование ÑеÑмина «поÑÑавÑик» (provider) в ÑÑом ÑмÑÑле не ÑвлÑеÑÑÑ ÑÑандаÑÑнÑм, но, по вÑей видимоÑÑи, Ñже ÑиÑоко иÑполÑзÑеÑÑÑ. (Ðго не ÑледÑÐµÑ Ð¿ÑÑаÑÑ Ñ ÑеÑмином «поÑÑавÑик ÑдоÑÑовеÑений» (identity provider) в конÑекÑÑе OpenID. ХоÑÑ OAuth в Postgres Pro Ñеализован взаимно ÑовмеÑÑимÑм Ñ Ð¿ÑоÑоколом OpenID Connect/OIDC, Ñам по Ñебе клиенÑом OIDC он не ÑвлÑеÑÑÑ Ð¸ не ÑÑебÑÐµÑ ÐµÐ³Ð¾ иÑполÑзоваÑÑ.)
- СеÑÐ²ÐµÑ Ð°Ð²ÑоÑизаÑии
СиÑÑема, полÑÑаÑÑÐ°Ñ Ð·Ð°Ð¿ÑоÑÑ Ð¾Ñ ÐºÐ»Ð¸ÐµÐ½Ñа и вÑпÑÑкаÑÑÐ°Ñ ÑÐ¾ÐºÐµÐ½Ñ Ð´Ð¾ÑÑÑпа Ð´Ð»Ñ Ð½ÐµÐ³Ð¾, поÑле полÑÑÐµÐ½Ð¸Ñ Ð¾Ð´Ð¾Ð±ÑÐµÐ½Ð¸Ñ Ð¾Ñ Ð°ÑÑенÑиÑиÑиÑованного владелÑÑа ÑеÑÑÑÑа. Postgres Pro не пÑедоÑÑавлÑÐµÑ ÑеÑÐ²ÐµÑ Ð°Ð²ÑоÑизаÑии â за ÑÑо оÑвеÑÐ°ÐµÑ Ð¿Ð¾ÑÑавÑик OAuth.
- ÐздаÑелÑ
ÐденÑиÑикаÑÐ¾Ñ ÑеÑвеÑа авÑоÑизаÑии (в виде URL c
https://), пÑедоÑÑавлÑÑÑего довеÑенное «пÑоÑÑÑанÑÑво имÑн» Ð´Ð»Ñ ÐºÐ»Ð¸ÐµÐ½Ñов и пÑиложений OAuth. ÐденÑиÑикаÑÐ¾Ñ Ð¸Ð·Ð´Ð°ÑÐµÐ»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑеÑвеÑÑ Ð°Ð²ÑоÑизаÑии взаимодейÑÑвоваÑÑ Ñ ÐºÐ»Ð¸ÐµÐ½Ñами недовеÑÑÑÑÐ¸Ñ Ð´ÑÑг дÑÑÐ³Ñ ÑÑбÑекÑов, иÑполÑзÑÑÑÐ¸Ñ ÑазнÑÑ Ð¸Ð·Ð´Ð°Ñелей.
ÐÑимеÑание
ÐÐ»Ñ Ð½ÐµÐ±Ð¾Ð»ÑÑÐ¸Ñ Ð¾ÐºÑÑжений ÑÑÑеÑÑвеннÑÑ ÑазлиÑий Ð¼ÐµÐ¶Ð´Ñ Ð¿Ð¾Ð½ÑÑиÑми «поÑÑавÑик», «ÑеÑÐ²ÐµÑ Ð°Ð²ÑоÑизаÑии» и «издаÑелÑ» Ð¼Ð¾Ð¶ÐµÑ Ð½Ðµ бÑÑÑ. Ðднако в более ÑложнÑÑ Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾ÑвÑзи один-ко-многим (или многие-ко-многим): поÑÑавÑик Ð¼Ð¾Ð¶ÐµÑ Ð²ÑпÑÑкаÑÑ Ð½ÐµÑколÑко иденÑиÑикаÑоÑов издаÑелей ÑазнÑм аÑендаÑоÑам и заÑем пÑедоÑÑавлÑÑÑ Ð½ÐµÑколÑко ÑеÑвеÑов авÑоÑизаÑии (возможно, Ñ ÑазнÑми набоÑами поддеÑживаемой ÑÑнкÑионалÑноÑÑи) Ð´Ð»Ñ Ð²Ð·Ð°Ð¸Ð¼Ð¾Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ Ñ ÐºÐ»Ð¸ÐµÐ½Ñами.
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑÐ¾ÐºÐµÐ½Ñ Ñипа bearer, коÑоÑÑе опÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð² RFC 6750 как Ñип Ñокенов доÑÑÑпа, иÑполÑзÑемÑÑ Ñ Ð¿ÑоÑоколом OAuth 2.0, где Ñокен ÑвлÑеÑÑÑ Ð½ÐµÐ¿ÑозÑаÑной ÑÑÑокой. ФоÑÐ¼Ð°Ñ Ñокена доÑÑÑпа завиÑÐ¸Ñ Ð¾Ñ ÑеализаÑии и вÑбиÑаеÑÑÑ ÐºÐ°Ð¶Ð´Ñм ÑеÑвеÑом авÑоÑизаÑии.
ÐÐ»Ñ Ð¿ÑоÑокола OAuth доÑÑÑÐ¿Ð½Ñ ÑледÑÑÑие паÑамеÑÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии:
issuerÐдÑÐµÑ Ñ HTTPS, коÑоÑÑй либо полноÑÑÑÑ ÑÐ¾Ð²Ð¿Ð°Ð´Ð°ÐµÑ Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом издаÑÐµÐ»Ñ ÑеÑвеÑа авÑоÑизаÑии, как опÑеделено в докÑменÑе обнаÑÑжениÑ, либо ÑвлÑеÑÑÑ Ð¸Ð·Ð²ÐµÑÑнÑм URI, коÑоÑÑй ÑказÑÐ²Ð°ÐµÑ Ð¿ÑÑмо на докÑÐ¼ÐµÐ½Ñ Ð¾Ð±Ð½Ð°ÑÑжениÑ. ÐÑо обÑзаÑелÑнÑй паÑамеÑÑ.
Ðогда ÐºÐ»Ð¸ÐµÐ½Ñ OAuth подклÑÑаеÑÑÑ Ðº ÑеÑвеÑÑ, адÑÐµÑ Ð´Ð»Ñ Ð´Ð¾ÐºÑменÑа обнаÑÑÐ¶ÐµÐ½Ð¸Ñ ÑоздаÑÑÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑа издаÑелÑ. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑÑÐ¾Ñ Ð°Ð´ÑÐµÑ ÑооÑвеÑÑÑвÑÐµÑ ÑоглаÑениÑм OpenID Connect Discovery: пÑÑÑ
/.well-known/openid-configurationдобавлÑеÑÑÑ Ð² конÑе иденÑиÑикаÑоÑа издаÑелÑ. Ðак ваÑианÑ, еÑли паÑамеÑÑissuerÑодеÑÐ¶Ð¸Ñ ÑÐµÐ³Ð¼ÐµÐ½Ñ Ð¿ÑÑи/.well-known/, адÑÐµÑ Ð¿ÑедоÑÑавлÑеÑÑÑ ÐºÐ»Ð¸ÐµÐ½ÑÑ ÐºÐ°Ðº еÑÑÑ.ÐÑедÑпÑеждение
ÐÐ»Ð¸ÐµÐ½Ñ OAuth в libpq ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð·Ð½Ð°Ñение паÑамеÑÑа ÑеÑвеÑа
issuerполноÑÑÑÑ Ñовпадало Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑом издаÑелÑ, коÑоÑÑй ÑодеÑжиÑÑÑ Ð² докÑменÑе обнаÑÑжениÑ. РзнаÑение иденÑиÑикаÑоÑа издаÑелÑ, в ÑÐ²Ð¾Ñ Ð¾ÑеÑедÑ, должно ÑовпадаÑÑ Ñо знаÑением паÑамеÑÑа oauth_issuer клиенÑа. ÐÑи ÑÑом Ñовпадение должно бÑÑÑ ÑÑÑогое â ваÑианÑÑ ÑегиÑÑÑа и ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð½Ðµ допÑÑкаÑÑÑÑ.scopeРазделÑннÑй пÑобелами ÑпиÑок ÑÑÐµÑ Ð´ÐµÐ¹ÑÑÐ²Ð¸Ñ OAuth, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼ÑÑ ÑеÑвеÑÑ Ð´Ð»Ñ Ð°Ð²ÑоÑизаÑии клиенÑа и аÑÑенÑиÑикаÑии полÑзоваÑелÑ. ÐоÑÑекÑнÑе знаÑÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÐµÑ ÑеÑÐ²ÐµÑ Ð°Ð²ÑоÑизаÑии и иÑполÑзÑемÑй модÑÐ»Ñ Ð¿ÑовеÑки OAuth (за дополниÑелÑной инÑоÑмаÑией о модÑлÑÑ Ð¿ÑовеÑки обÑаÑиÑеÑÑ Ðº Ðлаве 50). ÐÑо обÑзаÑелÑнÑй паÑамеÑÑ.
validatorÐиблиоÑека Ð´Ð»Ñ Ð¿ÑовеÑки Ñокенов Ñипа bearer. ÐÑли задаÑÑÑÑ, Ð¸Ð¼Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ полноÑÑÑÑ ÑовпадаÑÑ Ñ Ð¾Ð´Ð½Ð¾Ð¹ из библиоÑек, ÑказаннÑÑ Ð² oauth_validator_libraries. ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ ÑвлÑеÑÑÑ Ð¾Ð±ÑзаÑелÑнÑм, ÑолÑко еÑли в
oauth_validator_librariesÑказано болÑÑе одной библиоÑеки.mapÐозволÑÐµÑ ÑопоÑÑавлÑÑÑ Ð¸Ð¼ÐµÐ½Ð° поÑÑавÑиков ÑдоÑÑовеÑений OAuth Ñ Ð¸Ð¼ÐµÐ½Ð°Ð¼Ð¸ полÑзоваÑелей ÐÐ. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº РазделÑ 19.2. ÐÑли ÑопоÑÑавление не Ñказано, Ð¸Ð¼Ñ Ð¿Ð¾Ð»ÑзоваÑелÑ, ÑвÑзанное Ñ Ñокеном (как опÑеделено модÑлем пÑовеÑки OAuth), должно полноÑÑÑÑ ÑовпадаÑÑ Ñ Ð¸Ð¼ÐµÐ½ÐµÐ¼ запÑаÑиваемой Ñоли. ÐÑо необÑзаÑелÑнÑй паÑамеÑÑ.
-
delegate_ident_mapping ÐополниÑелÑнÑй паÑамеÑÑ, не пÑедназнаÑеннÑй Ð´Ð»Ñ ÑиÑокого иÑполÑзованиÑ.
ÐÑли задано знаÑение
1, ÑÑандаÑÑное ÑопоÑÑавление полÑзоваÑелей пÑи помоÑиpg_ident.confпÑопÑÑкаеÑÑÑ Ð¸ за ÑопоÑÑавление ÑдоÑÑовеÑений конеÑнÑÑ Ð¿Ð¾Ð»ÑзоваÑелей Ñ ÑолÑми ÐРнаÑÐ¸Ð½Ð°ÐµÑ Ð¾ÑвеÑаÑÑ Ð¼Ð¾Ð´ÑÐ»Ñ Ð¿ÑовеÑки OAuth. ÐÑли модÑÐ»Ñ Ð¿ÑовеÑки авÑоÑизÑÐµÑ Ñокен, ÑеÑÐ²ÐµÑ Ð´Ð¾Ð²ÐµÑÑÐµÑ ÑомÑ, ÑÑо полÑзоваÑÐµÐ»Ñ ÑазÑеÑено подклÑÑаÑÑÑÑ Ñ Ð·Ð°Ð¿ÑоÑенной ÑолÑÑ Ð¸ ÑÑо подклÑÑение должно ÑоÑÑоÑÑÑÑÑ Ð²Ð½Ðµ завиÑимоÑÑи Ð¾Ñ ÑÑаÑÑÑа аÑÑенÑиÑикаÑии полÑзоваÑелÑ.ÐÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ð½ÐµÑовмеÑÑим Ñ
map.ÐÑедÑпÑеждение
ÐаÑамеÑÑ
delegate_ident_mappingобеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑÑ Ð³Ð¸Ð±ÐºÐ¾ÑÑÑ Ð² пÑоекÑиÑовании ÑиÑÑÐµÐ¼Ñ Ð°ÑÑенÑиÑикаÑии, однако ÑÑебÑÐµÑ Ð°ÐºÐºÑÑаÑной ÑеализаÑии модÑÐ»Ñ Ð¿ÑовеÑки OAuth. Такой модÑÐ»Ñ Ð´Ð¾Ð»Ð¶ÐµÐ½ опÑеделÑÑÑ, обеÑпеÑÐ¸Ð²Ð°ÐµÑ Ð»Ð¸ Ñокен доÑÑаÑоÑнÑй ÑÑÐ¾Ð²ÐµÐ½Ñ Ð¿Ñав конеÑного полÑзоваÑÐµÐ»Ñ Ð² дополнение к ÑÑандаÑÑнÑм пÑовеÑкам, коÑоÑÑе Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑполнÑÑÑ Ð²Ñе модÑли пÑовеÑки. ÐÑполÑзÑйÑе ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñ Ð¾ÑÑоÑожноÑÑÑÑ.