OpenID Connect: авторизация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚ самописных ΠΊ стандарту

НСсколько мСсяцСв Π½Π°Π·Π°Π΄ я занимался Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ OpenID Connect сСрвСра для управлСния доступом сотСн Π½Π°ΡˆΠΈΡ… Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠžΡ‚ собствСнных Π½Π°Ρ€Π°Π±ΠΎΡ‚ΠΎΠΊ, ΡƒΠ΄ΠΎΠ±Π½Ρ‹Ρ… Π½Π° ΠΌΠ΅Π½ΡŒΡˆΠΈΡ… ΠΌΠ°ΡΡˆΡ‚Π°Π±Π°Ρ…, ΠΌΡ‹ ΠΏΠ΅Ρ€Π΅ΡˆΠ»ΠΈ ΠΊ общСпринятому стандарту. Доступ Ρ‡Π΅Ρ€Π΅Π· Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΡŒΠ½Ρ‹ΠΉ сСрвис Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠΎΠ½ΠΎΡ‚ΠΎΠ½Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, сокращаСт Π·Π°Ρ‚Ρ€Π°Ρ‚Ρ‹ Π½Π° Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΉ, позволяСт Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ ΠΈ Π½Π΅ Π»ΠΎΠΌΠ°Ρ‚ΡŒ Π³ΠΎΠ»ΠΎΠ²Ρƒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Π½ΠΎΠ²Ρ‹Ρ…. Π’ этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ я расскаТу ΠΎΠ± этом ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π΅ ΠΈ ΠΎ ΡˆΠΈΡˆΠΊΠ°Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ успСли Π½Π°Π±ΠΈΡ‚ΡŒ.

OpenID Connect: авторизация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚ самописных ΠΊ стандарту

Π”Π°Π²Π½Ρ‹ΠΌ-давно… Π‘ Ρ‡Π΅Π³ΠΎ всС Π½Π°Ρ‡ΠΈΠ½Π°Π»ΠΎΡΡŒ

НСсколько Π»Π΅Ρ‚ Π½Π°Π·Π°Π΄, ΠΊΠΎΠ³Π΄Π° Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ стало слишком ΠΌΠ½ΠΎΠ³ΠΎ для Ρ€ΡƒΡ‡Π½ΠΎΠ³ΠΎ управлСния, ΠΌΡ‹ написали ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ для контроля доступов Π²Π½ΡƒΡ‚Ρ€ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ. Π­Ρ‚ΠΎ Π±Ρ‹Π»ΠΎ простоС Rails-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Π»ΠΎΡΡŒ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ сотрудниках, Π³Π΄Π΅ настраивался доступ ΠΊ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Ρƒ. Π’ΠΎΠ³Π΄Π° ΠΆΠ΅ ΠΌΡ‹ подняли ΠΏΠ΅Ρ€Π²ΠΎΠ΅ SSO, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΡΠ½ΠΎΠ²Ρ‹Π²Π°Π»ΠΎΡΡŒ Π½Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ² со стороны ΠΊΠ»ΠΈΠ΅Π½Ρ‚Π° ΠΈ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠΊΠ΅Π½ пСрСдавался Π² ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с нСсколькими ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ ΠΈ свСрялся Π½Π° сСрвСрС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π­Ρ‚ΠΎ Π±Ρ‹Π» Π½Π΅ самый ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Ρ‚Π°ΠΊ, ΠΊΠ°ΠΊ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ΠΌΠ°Π»Ρ‹ΠΉ слой Π»ΠΎΠ³ΠΈΠΊΠΈ, Π° Π±Π°Π·Ρ‹ сотрудников вовсС ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π»ΠΈΡΡŒ с сСрвСром Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Бпустя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ врСмя ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡Ρƒ Ρ†Π΅Π½Ρ‚Ρ€Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. SSO ΠΏΠ΅Ρ€Π΅Π²Π΅Π»ΠΈ Π½Π° балансСр. Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenResty Π½Π° Lua Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ шаблон, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ провСрял Ρ‚ΠΎΠΊΠ΅Π½Ρ‹, Π·Π½Π°Π» Π² ΠΊΠ°ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ΄Π΅Ρ‚ запрос ΠΈ ΠΌΠΎΠ³ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, Π΅ΡΡ‚ΡŒ Π»ΠΈ Ρ‚ΡƒΠ΄Π° доступ. Π’Π°ΠΊΠΎΠΉ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ сильно упростил Π·Π°Π΄Π°Ρ‡Ρƒ контроля доступов Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ β€” Π² ΠΊΠΎΠ΄Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ прилоТСния ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ ΠΎΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ. Π’ ΠΈΡ‚ΠΎΠ³Π΅ ΠΌΡ‹ Π·Π°ΠΊΡ€Ρ‹Π»ΠΈ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ внСшнС, Π° само ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Π·Π½Π°Π»ΠΎ ΠΎΠ± Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Однако ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ ΠΎΡΡ‚Π°Π»Π°ΡΡŒ Π½Π΅Ρ€Π΅ΡˆΠ΅Π½Π½ΠΎΠΉ. Как Π±Ρ‹Ρ‚ΡŒ с прилоТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½ΡƒΠΆΠ½Π° информация ΠΎ сотрудниках? МоТно Π±Ρ‹Π»ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ API для сСрвиса Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π»ΠΎΠ³ΠΈΠΊΡƒ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ прилоТСния. К Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ зависимости ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ нашСго самописного прилоТСния, ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π² дальнСйшСм Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π² OpenSource, ΠΎΡ‚ нашСго Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½Π΅Π³ΠΎ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. О Π½Π΅ΠΌ ΠΌΡ‹ расскаТСм ΠΊΠ°ΠΊ-Π½ΠΈΠ±ΡƒΠ΄ΡŒ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Ρ€Π°Π·. РСшСниСм ΠΎΠ±Π΅ΠΈΡ… ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ стал OAuth.

К общСпринятым стандартам

OAuth β€” это понятный, общСпринятый стандарт Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π° нСдостаточно, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ стали сразу OpenID Connect (OIDC). Π‘Π°ΠΌ ΠΏΠΎ сСбС OIDC β€” это Ρ‚Ρ€Π΅Ρ‚ΡŒΡ рСализация ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠ³ΠΎ Π°ΡƒΡ‚Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ стандарта, которая ΠΏΠ΅Ρ€Π΅Ρ‚Π΅ΠΊΠ»Π° Π² надстройку Π½Π°Π΄ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠΌ OAuth 2.0 (ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ» Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ). Π’Π°ΠΊΠΎΠ΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ отсутствия Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π΄Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ смСны ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

Однако ΠΌΡ‹ Π½Π΅ стали Π²Ρ‹Π±ΠΈΡ€Π°Ρ‚ΡŒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΈ Ρ€Π΅ΡˆΠΈΠ»ΠΈ для нашСго ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡŽ с OIDC. Π’ ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ послуТило, Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ OIDC ΠΎΡ‡Π΅Π½ΡŒ Π³ΠΈΠ±ΠΎΠΊ Π² ΠΏΠ»Π°Π½Π΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π±Ρ‹Π»Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ OIDC Π½Π° своСм Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ сСрвСрС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ.

OpenID Connect: авторизация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚ самописных ΠΊ стандарту

Наш ΠΏΡƒΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнного OIDC-сСрвСра

1) ΠŸΡ€ΠΈΠ²Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²ΠΈΠ΄

Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ OIDC Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ привСсти Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… Π² Π²ΠΈΠ΄, понятный стандарту. Π’ OIDC это называСтся Claims. ΠšΠ»Π΅ΠΉΠΌΡ‹ ΠΏΠΎ сути β€” это ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ поля Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ… (name, email, phone ΠΈ Ρ‚.Π΄.). БущСствуСт стандартный список ΠΊΠ»Π΅ΠΉΠΌΠΎΠ², Π° всС, Ρ‡Ρ‚ΠΎ Π½Π΅ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² этот список, считаСтся кастомным. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ссли Π²Ρ‹ Π·Π°Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ OIDC-ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ – Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΠ΄ΠΎΠ±Π½ΠΎΠΉ кастомизации Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠ»Π΅ΠΉΠΌΠΎΠ².

Π“Ρ€ΡƒΠΏΠΏΠ° ΠΊΠ»Π΅ΠΉΠΌΠΎΠ² ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ΡΡ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ подмноТСство – Scope. ΠŸΡ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠ΄Π΅Ρ‚ запрос доступа Π½Π΅ ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΊΠ»Π΅ΠΉΠΌΠ°ΠΌ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΊ скоупам, Π΄Π°ΠΆΠ΅ Ссли Ρ‡Π°ΡΡ‚ΡŒ ΠΊΠ»Π΅ΠΉΠΌΠΎΠ² ΠΈΠ· скоупа Π½Π΅ Π½ΡƒΠΆΠ½Π°.

2) Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π»ΠΈ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π³Ρ€Π°Π½Ρ‚Ρ‹

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ Ρ‡Π°ΡΡ‚ΡŒΡŽ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ OIDC являСтся Π²Ρ‹Π±ΠΎΡ€ ΠΈ рСализация Ρ‚ΠΈΠΏΠΎΠ² Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Π³Ρ€Π°Π½Ρ‚ΠΎΠ². ΠžΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Π½Ρ‚Π° Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π²ΠΈΡΠ΅Ρ‚ΡŒ дальнСйший сцСнарий взаимодСйствия Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ прилоТСния с Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ сСрвСром. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Π½Π°Ρ схСма Π²Ρ‹Π±ΠΎΡ€Π° Π½ΡƒΠΆΠ½ΠΎΠ³ΠΎ Π³Ρ€Π°Π½Ρ‚Π° прСдставлСна Π½Π° рисункС Π½ΠΈΠΆΠ΅.

OpenID Connect: авторизация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚ самописных ΠΊ стандарту

Для нашСго ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ прилоТСния ΠΌΡ‹ использовали самый распространСнный Π³Ρ€Π°Π½Ρ‚ – Authorization Code. Π•Π³ΠΎ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ΠΌ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся Ρ‚Ρ€Π΅Ρ…ΡˆΠ°Π³ΠΎΠ²Ρ‹ΠΌ, Ρ‚.Π΅. ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ. Π‘Π½Π°Ρ‡Π°Π»Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ Π΄Π΅Π»Π°Π΅Ρ‚ запрос Π½Π° Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ – Authorization Code, Π·Π°Ρ‚Π΅ΠΌ с этим Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ, словно с Π±ΠΈΠ»Π΅Ρ‚ΠΎΠΌ Π½Π° ΠΏΡ€ΠΎΠ΅Π·Π΄, Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ Ρ‚ΠΎΠΊΠ΅Π½ доступа. ВсС основноС взаимодСйствиС Π΄Π°Π½Π½ΠΎΠ³ΠΎ сцСнария Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ основано Π½Π° Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚Π°Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ сСрвСром. ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ± этом Π³Ρ€Π°Π½Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ здСсь.

OAuth придСрТиваСтся ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, Ρ‡Ρ‚ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ доступа, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Π΅ послС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π² срСднСм ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚. Π“Ρ€Π°Π½Ρ‚ Authorization Code являСтся Ρ‚Ρ€Π΅Ρ…ΡˆΠ°Π³ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΎΠΉ Ρ‡Π΅Ρ€Π΅Π· Ρ€Π΅Π΄ΠΈΡ€Π΅ΠΊΡ‚Ρ‹, ΠΊΠ°ΠΆΠ΄Ρ‹Π΅ 10 ΠΌΠΈΠ½ΡƒΡ‚ Ρ‚Π°ΠΊΠΎΠΉ шаг ΠΏΡ€ΠΎΠ²ΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ, чСстно говоря, Π½Π΅ самоС приятноС для Π³Π»Π°Π· занятиС. Для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ сущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Π³Ρ€Π°Π½Ρ‚ – Refresh Token, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Ρƒ сСбя Ρ‚Π°ΠΊΠΆΠ΅ задСйствовали. Π’ΡƒΡ‚ всС ΠΏΡ€ΠΎΡ‰Π΅. Π’ΠΎ врСмя ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ с Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π³Ρ€Π°Π½Ρ‚Π°, ΠΏΠΎΠΌΠΈΠΌΠΎ основного Ρ‚ΠΎΠΊΠ΅Π½Π° доступа выдаСтся Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ – Refresh Token, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π· ΠΈ врСмя Π΅Π³ΠΎ ΠΆΠΈΠ·Π½ΠΈ, ΠΊΠ°ΠΊ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, сущСствСнно большС. Π‘ этим Refresh Token’ом, ΠΊΠΎΠ³Π΄Π° закончится TTL (Time to Live) основного Ρ‚ΠΎΠΊΠ΅Π½Π° доступа, запрос Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π° доступа ΠΏΡ€ΠΈΠ΄Π΅Ρ‚ Π½Π° endpoint ΡƒΠΆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π³Ρ€Π°Π½Ρ‚Π°. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Refresh Token сразу обнуляСтся. Вакая ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° являСтся Π΄Π²ΡƒΡ…ΡˆΠ°Π³ΠΎΠ²ΠΎΠΉ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° Π² Ρ„ΠΎΠ½Π΅, Π½Π΅Π·Π°ΠΌΠ΅Ρ‚Π½ΠΎ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ.

3) Настроили Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…

ПослС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π³Ρ€Π°Π½Ρ‚Ρ‹ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ‹, авторизация Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. Π’ OIDC Π΅ΡΡ‚ΡŒ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ endpoint для этого, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ со своим Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ доступа ΠΈ ΠΏΡ€ΠΈ Π΅Π³ΠΎ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ…. И Ссли Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Ρ‚Π°ΠΊ часто, Π° Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎ ΠΌΠ½ΠΎΠ³Ρƒ Ρ€Π°Π·, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΉΡ‚ΠΈ ΠΊ Ρ‚Π°ΠΊΠΎΠΌΡƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡŽ, ΠΊΠ°ΠΊ JWT-Ρ‚ΠΎΠΊΠ΅Π½Ρ‹. Π­Ρ‚ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ стандартом. Π‘Π°ΠΌ ΠΏΠΎ сСбС JWT-Ρ‚ΠΎΠΊΠ΅Π½ состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… частСй: header (информация ΠΎ Ρ‚ΠΎΠΊΠ΅Π½Π΅), payload (Π»ΡŽΠ±Ρ‹Π΅ Π½ΡƒΠΆΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅) ΠΈ signature (подпись, Ρ‚ΠΎΠΊΠ΅Π½ подписываСтся сСрвСром ΠΈ Π² дальнСйшСм ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ источник Π΅Π³ΠΎ подписи).

Π’ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ OIDC JWT-Ρ‚ΠΎΠΊΠ΅Π½ называСтся id_token. Он ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½ вмСстС с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ доступа ΠΈ всС, Ρ‡Ρ‚ΠΎ остаСтся – ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ подпись. Π£ сСрвСра Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ для этого сущСствуСт ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ endpoint со связкой ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JWK. И говоря ΠΎΠ± этом, стоит ΡƒΠΏΠΎΠΌΡΠ½ΡƒΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ сущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ endpoint, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π° основС стандарта RFC5785 ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ OIDC-сСрвСра. Π’ Π½Π΅ΠΌ содСрТатся всС адрСса endpoint’ов (Π² Ρ‚ΠΎΠΌ, числС адрСс связки ΠΏΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… для подписи), ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ ΠΊΠ»Π΅ΠΉΠΌΡ‹ ΠΈ скоупы, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Π΅ Π³Ρ€Π°Π½Ρ‚Ρ‹ ΠΈ Ρ‚.Π΄.

НапримСр Π² Google:

{
 "issuer": "https://accounts.google.com",
 "authorization_endpoint": "https://accounts.google.com/o/oauth2/v2/auth",
 "device_authorization_endpoint": "https://oauth2.googleapis.com/device/code",
 "token_endpoint": "https://oauth2.googleapis.com/token",
 "userinfo_endpoint": "https://openidconnect.googleapis.com/v1/userinfo",
 "revocation_endpoint": "https://oauth2.googleapis.com/revoke",
 "jwks_uri": "https://www.googleapis.com/oauth2/v3/certs",
 "response_types_supported": [
  "code",
  "token",
  "id_token",
  "code token",
  "code id_token",
  "token id_token",
  "code token id_token",
  "none"
 ],
 "subject_types_supported": [
  "public"
 ],
 "id_token_signing_alg_values_supported": [
  "RS256"
 ],
 "scopes_supported": [
  "openid",
  "email",
  "profile"
 ],
 "token_endpoint_auth_methods_supported": [
  "client_secret_post",
  "client_secret_basic"
 ],
 "claims_supported": [
  "aud",
  "email",
  "email_verified",
  "exp",
  "family_name",
  "given_name",
  "iat",
  "iss",
  "locale",
  "name",
  "picture",
  "sub"
 ],
 "code_challenge_methods_supported": [
  "plain",
  "S256"
 ],
 "grant_types_supported": [
  "authorization_code",
  "refresh_token",
  "urn:ietf:params:oauth:grant-type:device_code",
  "urn:ietf:params:oauth:grant-type:jwt-bearer"
 ]
}

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ id_token’а ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ всС Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΊΠ»Π΅ΠΉΠΌΡ‹ Π² payload Ρ‚ΠΎΠΊΠ΅Π½Π° ΠΈ Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π½Π° сСрвСр Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ для запроса Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅. ΠœΠΈΠ½ΡƒΡΠΎΠΌ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° являСтся Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… ΠΎΡ‚ сСрвСра ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ Π½Π΅ сразу, Π° вмСстС с Π½ΠΎΠ²Ρ‹ΠΌ Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠΌ доступа.

Π˜Ρ‚ΠΎΠ³ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ

Π’Π°ΠΊ, послС Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ собствСнного OIDC сСрвСра ΠΈ настройки ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΉ ΠΊ Π½Π΅ΠΌΡƒ Π½Π° сторонС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΡ….
Π’Π°ΠΊ ΠΊΠ°ΠΊ OIDC β€” это ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ стандарт, Ρƒ нас появилась Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€Π° ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π° ΠΈΠ»ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ сСрвСра. ΠœΡ‹ ΠΏΡ€ΠΎΠ±ΠΎΠ²Π°Π»ΠΈ Keycloak, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ оказался ΠΎΡ‡Π΅Π½ΡŒ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΌ Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ, послС настройки ΠΈ смСны ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΉ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π½Π° сторонС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΠ½ Π³ΠΎΡ‚ΠΎΠ² ΠΊ Ρ€Π°Π±ΠΎΡ‚Π΅. На сторонС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ остаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΡΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ.

Говоря ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΡΡ…

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… нашСй ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ OIDC-сСрвСра ΠΌΡ‹ собрали свою Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ, которая дополнялась ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости. ПослС ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎΠ³ΠΎ рассмотрСния Π΄Ρ€ΡƒΠ³ΠΈΡ… Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ это спорный ΠΌΠΎΠΌΠ΅Π½Ρ‚. Π’ ΠΏΠΎΠ»ΡŒΠ·Ρƒ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ своСго сСрвСра послуТили опасСния со стороны ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€ΠΎΠ² Π² отсутствии Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ старой систСмы Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ присутствовали Ρ€Π°Π·Π½Ρ‹Π΅ кастомныС Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… сСрвисов ΠΈ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΎΡΡŒ ΡƒΠΆΠ΅ довольно ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½Ρ‹Ρ… ΠΎ сотрудниках. Однако Π² Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… рСализациях, ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ удобства для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. НапримСр, Π² Keycloak своя систСма ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ хранятся прямо Π² Π½Π΅ΠΉ, Π° ΠΏΠ΅Ρ€Π΅Π³Π½Π°Ρ‚ΡŒ своих ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ‚ΡƒΠ΄Π° Π½Π΅ составит большого Ρ‚Ρ€ΡƒΠ΄Π°. Для этого Π² Keycloak Π΅ΡΡ‚ΡŒ API, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π² ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ всС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ дСйствия ΠΏΠΎ пСрСносу.

Π•Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ сСртифицированной, интСрСсной, Π½Π° ΠΌΠΎΠΉ взгляд, Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ β€” Ory Hydra. Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½Π° ΠΎΠ½Π° Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ состоит ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ². Для ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ Π²Π°ΠΌ понадобится ΡΠ²ΡΠ·Π°Ρ‚ΡŒ свой сСрвис ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ с ΠΈΡ… сСрвисом Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости.

Keycloak ΠΈ Ory Hydra β€” Π½Π΅ СдинствСнныС Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ. Π›ΡƒΡ‡ΡˆΠ΅ всСго ΠΏΠΎΠ΄Π±ΠΈΡ€Π°Ρ‚ΡŒ ΡΠ΅Ρ€Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ OpenID Foundation Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ Ρƒ Ρ‚Π°ΠΊΠΈΡ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ Π΅ΡΡ‚ΡŒ Π·Π½Π°Ρ‡ΠΎΠΊ OpenID Certification.

OpenID Connect: авторизация Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚ самописных ΠΊ стандарту

Π’Π°ΠΊΠΆΠ΅ Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ»Π°Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ²Π°ΠΉΠ΄Π΅Ρ€Π°Ρ…, Ссли Π²Ρ‹ Π½Π΅ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ свой сСрвСр OIDC. На сСгодняшний дСнь Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² ΠΌΠ½ΠΎΠ³ΠΎ.

Π§Ρ‚ΠΎ дальшС

Π’ блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ ΠΌΡ‹ собираСмся Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ‚Ρ€Π°Ρ„ΠΈΠΊ Π΄ΠΎ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΡ… сСрвисов Π΄Ρ€ΡƒΠ³ΠΈΠΌ способом. ΠŸΠ»Π°Π½ΠΈΡ€ΡƒΠ΅ΠΌ пСрСвСсти нашС Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ SSO Π½Π° балансСрС с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ OpenResty Π½Π° прокси, Π² основС ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π»Π΅ΠΆΠΈΡ‚ OAuth. Π—Π΄Π΅ΡΡŒ Ρ‚Π°ΠΊΠΆΠ΅ сущСствуСт ΡƒΠΆΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Ρ… Ρ€Π΅ΡˆΠ΅Π½ΠΈΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Ρ‹

jwt.io – Ρ…ΠΎΡ€ΠΎΡˆΠΈΡ… сСрвис для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ JWT-Ρ‚ΠΎΠΊΠ΅Π½ΠΎΠ²
openid.net/developers/certified β€” список сСртифицированных Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ OIDC

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: habr.com