OAuth болон OpenID Connect-ийн зурагт гарын авлага

Анхаарна уу. орчуулга.: Октагийн энэхүү гайхалтай нийтлэл OAuth болон OIDC (OpenID Connect) хэрхэн энгийн бөгөөд ойлгомжтой байдлаар ажилладгийг тайлбарласан болно. Энэхүү мэдлэг нь бусад үйлчилгээнүүдтэй нууц мэдээллийг солилцдог алдартай вэб програмын хөгжүүлэгчид, системийн администраторууд, тэр ч байтугай "жирийн хэрэглэгчид" хүртэл ашигтай байх болно.

Интернетийн чулуун зэвсгийн үед үйлчилгээнүүдийн хооронд мэдээлэл солилцох нь хялбар байсан. Та зүгээр л нэг үйлчилгээнээс нөгөө үйлчилгээнд нэвтрэх нэр, нууц үгээ өгснөөр тэр таны дансанд нэвтэрч, шаардлагатай бүх мэдээллийг хүлээн авсан.

OAuth болон OpenID Connect-ийн зурагт гарын авлага
"Банкны дансаа надад өгөөч." "Нууц үг, мөнгөөр ​​бүх зүйл сайхан болно гэж бид амлаж байна. Энэ бол үнэнч, үнэнч!" *хэ хэ*

Аймшиг! Хэн ч хэрэглэгчээс хэрэглэгчийн нэр, нууц үгээ хуваалцахыг шаардах ёсгүй, итгэмжлэл, өөр үйлчилгээтэй. Энэ үйлчилгээний цаана байгаа байгууллага нь өгөгдлийг аюулгүй байлгаж, шаардлагатай хэмжээнээс илүү хувийн мэдээллийг цуглуулахгүй гэсэн баталгаа байхгүй. Энэ нь галзуу мэт санагдаж магадгүй ч зарим програмууд энэ дадлыг ашигладаг хэвээр байна!

Өнөөдөр нэг үйлчилгээнд нөгөөгийн өгөгдлийг аюулгүй ашиглах боломжийг олгодог нэг стандарт байдаг. Харамсалтай нь ийм стандартууд нь маш олон үг хэллэг, нэр томьёо ашигладаг нь тэдний ойлголтыг хүндрүүлдэг. Энэ материалын зорилго нь энгийн дүрслэл ашиглан хэрхэн ажилладагийг тайлбарлах явдал юм (Та миний зурсан зургуудыг хүүхдийн будалттай төстэй гэж бодож байна уу? Өө!).

OAuth болон OpenID Connect-ийн зурагт гарын авлага

Дашрамд хэлэхэд энэ гарын авлагыг видео форматаар авах боломжтой.

Хатагтай, ноёд оо, тавтай морилно уу: OAuth 2.0

OAuth 2.0 нь нэг программыг өөр програмын мэдээлэлд хандах зөвшөөрөл авах боломжийг олгодог аюулгүй байдлын стандарт юм. Зөвшөөрөл олгох үе шатуудын дараалал [зөвшөөрөл] (эсвэл зөвшөөрөл [зөвшөөрөх]) байнга залгадаг зөвшөөрөл [зөвшөөрөл] эсвэл бүр шилжүүлсэн зөвшөөрөл [төлөөлөгдсөн зөвшөөрөл]. Энэ стандартыг ашигласнаар та програмд ​​нууц үгээ өгөхгүйгээр өгөгдөл унших эсвэл өөр програмын функцийг ашиглахыг зөвшөөрнө. Анги!

Жишээлбэл, та "Өдрийн азгүй тоглоом" нэртэй сайт нээсэн гэж бодъё. [Өдрийн аймшигт тоглоом] өдөр бүр утсаар мессеж хэлбэрээр үг хэллэг хүлээн авахын тулд үүн дээр бүртгүүлэхээр шийдсэн. Танд энэ сайт үнэхээр таалагдсан тул та үүнийг бүх найзуудтайгаа хуваалцахаар шийдсэн. Эцсийн эцэст хүн бүр аймшигтай тоглоомонд дуртай, тийм ээ?

OAuth болон OpenID Connect-ийн зурагт гарын авлага
"Өдрийн харамсалтай тоглоом: Биеийнхээ зүүн хагасыг алдсан залуугийн тухай сонссон уу? Одоо тэр үргэлж зөв байдаг!" (ойролцоогоор орчуулга, учир нь эх хувь нь өөрийн гэсэн үг хэллэгтэй байдаг - ойролцоогоор орчуулга.)

Холбоо барих жагсаалтаас хүн бүрт бичих нь сонголт биш гэдэг нь ойлгомжтой. Хэрэв та над шиг жаахан ч гэсэн юм бол шаардлагагүй ажил хийхээс зайлсхийхийн тулд бүх зүйлийг хийх болно. Аз болоход, "Өдрийн Аймшигтай Пун" бүх найзуудаа өөрөө урьж чадна! Үүнийг хийхийн тулд та зүгээр л харилцагчдынхаа цахим шуудангийн хандалтыг нээх хэрэгтэй - сайт өөрөө тэдэнд урилга илгээх болно (OAuth дүрэм)!

OAuth болон OpenID Connect-ийн зурагт гарын авлага
"Хүн бүр тоглоомд дуртай! - Аль хэдийн нэвтэрсэн үү? "Өдрийн аймшигт тоглоомын вэбсайтад таны харилцагчдын жагсаалтад нэвтрэхийг та зөвшөөрөх үү? - Баярлалаа! Одооноос хойш бид таны мэддэг бүх хүнд өдөр бүр, эцсийн мөч хүртэл сануулга илгээх болно! Чи бол хамгийн сайн найз!"

  1. Имэйл үйлчилгээгээ сонгоно уу.
  2. Шаардлагатай бол шуудангийн сайт руу орж, бүртгэлдээ нэвтэрнэ үү.
  3. "Өдрийн Аймшигтай Пун"-д харилцагчиддаа хандах зөвшөөрөл өгөөрэй.
  4. Өдрийн аймшигтай тоглоом сайт руу буцах.

Хэрэв та бодлоо өөрчилсөн тохиолдолд OAuth-г ашигладаг програмууд нь хандалтыг цуцлах боломжийг олгодог. Хэрэв та "Өдрийн Аймшигтай Пун"-тай харилцах харилцаагаа цаашид хуваалцахгүй гэж шийдсэн бол шуудангийн сайт руу орж, зөвшөөрөгдсөн програмуудын жагсаалтаас тоглоомын сайтыг устгаж болно.

OAuth урсгал

Бид зүгээр л ихэвчлэн гэж нэрлэдэг зүйлийг даван туулсан урсгал [урсгал] OAuth. Бидний жишээн дээр энэ урсгал нь харагдахуйц алхмуудаас гадна хэд хэдэн үл үзэгдэх алхмуудаас бүрддэг бөгөөд үүнд хоёр үйлчилгээ аюулгүй мэдээлэл солилцох талаар тохиролцдог. Өмнөх Өдрийн Аймшигтай Пун жишээнд "зөвшөөрлийн код" урсгал гэгддэг хамгийн түгээмэл OAuth 2.0 урсгалыг ашигладаг. ["зөвшөөрлийн код" урсгал].

OAuth хэрхэн ажилладаг талаар дэлгэрэнгүй ярихаасаа өмнө зарим нэр томъёоны утгын талаар ярилцъя:

  • Нөөцийн эзэн:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Энэ бол чи! Та өөрийн итгэмжлэл, өгөгдлийг эзэмшиж, өөрийн бүртгэл дээр хийж болох бүх үйл ажиллагааг хянадаг.

  • Клиент:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Аппликейшн (жишээ нь, "Өдрийн Аймшигтай Пун үйлчилгээ)"-ийн нэрийн өмнөөс тодорхой үйлдэл хийхийг хүссэн програм. Нөөцийн эзэн'а.

  • Зөвшөөрлийн сервер:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Мэддэг програм Нөөцийн эзэн'a ба аль нь у Нөөцийн эзэн'Би аль хэдийн данстай болсон.

  • нөөцийн сервер:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Хэрэглээний програмчлалын интерфейс (API) эсвэл үйлчилгээ Клиент нэрийн өмнөөс ашиглахыг хүсч байна Нөөцийн эзэн'а.

  • URI-г дахин чиглүүлэх:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Тэр холбоос Зөвшөөрлийн сервер дахин чиглүүлэх болно Нөөцийн эзэн'болон зөвшөөрөл өгсний дараа Клиент' at. Үүнийг заримдаа "Буцах URL" гэж нэрлэдэг.

  • Хариултын төрөл:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Хүлээн авахаар хүлээгдэж буй мэдээллийн төрөл Клиент. Хамгийн түгээмэл Хариултын төрөл'ohm бол код, өөрөөр хэлбэл Клиент хүлээн авна гэж найдаж байна Зөвшөөрлийн код.

  • Хамрах хүрээ:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Энэ нь шаардлагатай зөвшөөрлийн нарийвчилсан тайлбар юм Клиент'y, тухайлбал өгөгдөлд хандах эсвэл тодорхой үйлдэл хийх.

  • зөвшөөрөл:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Зөвшөөрлийн сервер авдаг Хамрах хүрээхүсэлт тавьсан Клиентгэж асуув Нөөцийн эзэн'a, тэр хангахад бэлэн үү Клиент'тохирох зөвшөөрөлтэй байна.

  • Клиент ID:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Энэ ID нь танихад хэрэглэгддэг Клиентдээр Зөвшөөрлийн сервер'e.

  • Үйлчлүүлэгчийн нууц:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Энэ бол зөвхөн мэдэгдэж байгаа нууц үг юм Клиентчи болон Зөвшөөрлийн сервер' at. Энэ нь тэдэнд хувийн мэдээллээ хуваалцах боломжийг олгодог.

  • Зөвшөөрлийн код:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Богино хугацааны хүчинтэй түр код Клиент олгодог Зөвшөөрлийн сервер-ийн оронд Нэвтрэх Token.

  • Нэвтрэх Token:

    OAuth болон OpenID Connect-ийн зурагт гарын авлага

    Үйлчлүүлэгчийн харилцахын тулд ашиглах түлхүүр нөөцийн сервер'ом. Нэг төрлийн тэмдэг эсвэл түлхүүрийн карт өгдөг Клиент'өгөгдөл хүсэх эсвэл үйлдэл хийх зөвшөөрөлтэй байна нөөцийн серверТаны өмнөөс.

тайлбар: Заримдаа Authorization Server болон Resource Server нь ижил сервер байдаг. Гэхдээ зарим тохиолдолд эдгээр нь нэг байгууллагад харьяалагддаггүй байсан ч өөр өөр сервер байж болно. Жишээлбэл, Зөвшөөрлийн сервер нь нөөцийн серверийн итгэмжлэгдсэн гуравдагч талын үйлчилгээ байж болно.

Одоо бид OAuth 2.0-ийн үндсэн ойлголтуудыг авч үзсэнийхээ дараа жишээндээ буцаж очоод OAuth урсгалд юу тохиолдохыг нарийвчлан харцгаая.

OAuth болон OpenID Connect-ийн зурагт гарын авлага

  1. Та, Нөөцийн эзэн, та Өдрийн Аймшигт Пун үйлчилгээг үзүүлэхийг хүсч байна (Клиентy) таны харилцагчид руу нэвтрэх, ингэснээр тэд таны бүх найзууд руу урилга илгээх боломжтой.
  2. Клиент хөтчийг хуудас руу дахин чиглүүлдэг Зөвшөөрлийн сервер'a ба асуулгад оруулна Клиент ID, URI-г дахин чиглүүлэх, Хариултын төрөл ба нэг буюу түүнээс дээш Хамрах хүрээ (зөвшөөрөл) хэрэгтэй.
  3. Зөвшөөрлийн сервер таныг баталгаажуулж, шаардлагатай бол хэрэглэгчийн нэр, нууц үг асууна.
  4. Зөвшөөрлийн сервер маягтыг харуулна зөвшөөрөл (баталгаажуулалт) бүгдийн жагсаалттай Хамрах хүрээхүсэлт тавьсан Клиент'ом. Та зөвшөөрөх эсвэл татгалзах.
  5. Зөвшөөрлийн сервер таныг сайт руу дахин чиглүүлнэ Клиент'a, ашиглаж байна URI-г дахин чиглүүлэх хамт Зөвшөөрлийн код (Зөвшөөрлийн код).
  6. Клиент -тай шууд харилцдаг Зөвшөөрлийн сервер'ohm (хөтөчийг алгасах Нөөцийн эзэн'a) болон аюулгүй илгээдэг Клиент ID, Үйлчлүүлэгчийн нууц и Зөвшөөрлийн код.
  7. Зөвшөөрлийн сервер өгөгдлийг шалгаж, хариу өгнө Нэвтрэх Token'om (хандалтын токен).
  8. Одоо Клиент ашиглаж болно Нэвтрэх Token руу хүсэлт илгээх нөөцийн сервер харилцагчдын жагсаалтыг авах.

Үйлчлүүлэгчийн ID ба нууц

Таныг "Өдрийн Аймшигтай Пун"-д таны харилцагчид руу нэвтрэхийг зөвшөөрөхөөс хамаагүй өмнө Client болон Authorization Server нь ажлын харилцаатай байсан. Зөвшөөрлийн сервер нь Client ID болон Client Secret-ийг үүсгэдэг (заримдаа Апп ID и Апп нууц) болон OAuth-н хүрээнд цаашид харилцан ажиллахын тулд тэдгээрийг Үйлчлүүлэгч рүү илгээсэн.

OAuth болон OpenID Connect-ийн зурагт гарын авлага
"- Сайн уу! Би тантай хамт ажиллахыг хүсч байна! -Мэдээж, асуудал биш! Энд таны үйлчлүүлэгчийн ID болон нууц байна!"

Энэ нэр нь Клиентийн нууцыг зөвхөн Client болон Authorization Server л мэдэхийн тулд нууцлах ёстойг сануулж байна. Эцсийн эцэст, түүний тусламжтайгаар Зөвшөөрлийн сервер нь үйлчлүүлэгчийн үнэнийг баталгаажуулдаг.

Гэхдээ энэ нь бүгд биш ... OpenID Connect-ийг тавтай морилно уу!

OAuth 2.0 нь зөвхөн зориулагдсан зөвшөөрөл - нэг програмаас нөгөө програм руу өгөгдөл, функцэд хандах боломжийг олгох. OpenID холболт (OIDC) нь OAuth 2.0 дээрх нимгэн давхарга бөгөөд бүртгэлд нэвтэрсэн хэрэглэгчийн нэвтрэх болон профайлын дэлгэрэнгүй мэдээллийг нэмдэг. Нэвтрэх сесс зохион байгуулалтыг ихэвчлэн гэж нэрлэдэг баталгаажуулалт [баталгаажуулалт], мөн системд нэвтэрсэн хэрэглэгчийн талаарх мэдээлэл (жишээ нь Нөөцийн эзэн'e), - Хувийн мэдээлэл [биелэл]. Хэрэв Authorization Server нь OIDC-г дэмждэг бол үүнийг заримдаа гэж нэрлэдэг хувийн мэдээлэл нийлүүлэгч [бие даасан үйлчилгээ үзүүлэгч]хангадаг учраас Клиентталаар мэдээлэлтэй байна Нөөцийн эзэн'e.

OpenID Connect нь олон программд нэг нэвтрэлт ашиглаж болох хувилбаруудыг хэрэгжүүлэх боломжийг олгодог - энэ аргыг бас нэрлэдэг. ганц нэвтрэх (SSO). Жишээлбэл, аппликейшн нь Facebook, Twitter зэрэг нийгмийн сүлжээнүүдтэй SSO-ийн интеграцчлалыг дэмжиж, хэрэглэгчдэд аль хэдийн байгаа бүртгэлээ ашиглах боломжийг олгож, ашиглахыг илүүд үздэг.

OAuth болон OpenID Connect-ийн зурагт гарын авлага

OpenID Connect-ийн урсгал (урсгал) нь OAuth-тай адил харагдаж байна. Ганц ялгаа нь анхдагч хүсэлтэд тодорхой хамрах хүрээг ашигладаг явдал юм openid, - А Клиент эцэст нь иймэрхүү болдог Нэвтрэх TokenТэгээд ID токен.

OAuth болон OpenID Connect-ийн зурагт гарын авлага

Яг OAuth урсгалын нэгэн адил, Нэвтрэх Token OpenID Connect-д энэ нь тодорхойгүй зарим утга юм Клиент' at. Үзэл бодлоор Клиент‘а Нэвтрэх Token хүсэлт болгонд дамжуулагдах тэмдэгтүүдийн мөрийг илэрхийлнэ нөөцийн сервер'y, энэ нь жетон хүчинтэй эсэхийг тодорхойлдог. ID токен огт өөр зүйлийг илэрхийлдэг.

ID токен бол JWT юм

ID токен нь JSON Web Token эсвэл JWT гэгддэг тусгайлан форматлагдсан тэмдэгтүүдийн мөр юм (заримдаа JWT жетоныг "jots" гэж дууддаг). Гадны ажиглагчдад JWT нь үл ойлгогдох утгагүй мэт санагдаж болох ч Клиент JWT-ээс ID, хэрэглэгчийн нэр, нэвтрэх хугацаа, дуусах хугацаа гэх мэт янз бүрийн мэдээллийг гаргаж авах боломжтой ID токен'a, JWT-д хөндлөнгөөс оролцох оролдлого байгаа эсэх. Дотор өгөгдөл ID токен'а гэж нэрлэдэг програмууд [нэхэмжлэл].

OAuth болон OpenID Connect-ийн зурагт гарын авлага

OIDC-ийн хувьд стандарт арга зам байдаг Клиент тухайн хүний ​​талаар нэмэлт мэдээлэл авах хүсэлт гаргаж болно [биелэл] нь Зөвшөөрлийн сервер'a, жишээ нь, ашиглаж буй имэйл хаяг Нэвтрэх Token.

OAuth болон OIDC-ийн талаар нэмэлт мэдээлэл аваарай

Тиймээс бид OAuth болон OIDC хэрхэн ажилладаг талаар товч тоймлов. Илүү гүн ухахад бэлэн үү? OAuth 2.0 болон OpenID Connect-ийн талаар илүү ихийг мэдэхэд туслах нэмэлт эх сурвалжууд энд байна:

Ердийнх шигээ санал бодлоо чөлөөтэй илэрхийлээрэй. Манай хамгийн сүүлийн үеийн мэдээтэй байхын тулд бүртгүүлээрэй Twitter и YouTube-ийн Хөгжүүлэгчид зориулсан Окта!

Орчуулагчийн жич

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх