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 ื–ื” ื ืงืจื ืชื‘ื™ืขื•ืช. ืชื‘ื™ืขื•ืช ื”ืŸ ื‘ืขืฆื ืฉื“ื•ืช ืื—ืจื•ื ื™ื ื‘ืžืกื“ ื”ื ืชื•ื ื™ื ืฉืœ ื”ืžืฉืชืžืฉ (ืฉื, ื“ื•ืืจ ืืœืงื˜ืจื•ื ื™, ื˜ืœืคื•ืŸ ื•ื›ื•'). ืงื™ื™ื ืจืฉื™ืžื” ืกื˜ื ื“ืจื˜ื™ืช ืฉืœ ื‘ื•ืœื™ื, ื•ื›ืœ ืžื” ืฉืื™ื ื• ื ื›ืœืœ ื‘ืจืฉื™ืžื” ื–ื• ื ื—ืฉื‘ ืœืžื ื”ื’. ืœื›ืŸ, ื”ื ืงื•ื“ื” ื”ืจืืฉื•ื ื” ืฉืืชื” ืฆืจื™ืš ืœืฉื™ื ืœื‘ ืืœื™ื” ืื ืืชื” ืจื•ืฆื” ืœื‘ื—ื•ืจ ืกืคืง OIDC ืงื™ื™ื ื”ื™ื ื”ืืคืฉืจื•ืช ืœื”ืชืืžื” ืื™ืฉื™ืช ื ื•ื—ื” ืฉืœ ืžื•ืชื’ื™ื ื—ื“ืฉื™ื.

ืงื‘ื•ืฆืช ืกื™ืžื ื™ ื”ื”ื™ื›ืจ ืžืฉื•ืœื‘ืช ืœืงื‘ื•ืฆืช ื”ืžืฉื ื” ื”ื‘ืื” - ื”ื™ืงืฃ. ื‘ืžื”ืœืš ื”ื”ืจืฉืื” ืžืชื‘ืงืฉืช ื’ื™ืฉื” ืœื ืœืžื•ืชื’ื™ื ืกืคืฆื™ืคื™ื™ื, ืืœื ืœื”ื™ืงืคื™ื, ื’ื ืื ืื™ืŸ ืฆื•ืจืš ื‘ื—ืœืง ืžื”ืžื•ืชื’ื™ื ืžื”ืกืงื•ืค.

2) ื™ื™ืฉื ืืช ื”ืžืขื ืงื™ื ื”ื“ืจื•ืฉื™ื

ื”ื—ืœืง ื”ื‘ื ืฉืœ ืฉื™ืœื•ื‘ OIDC ื”ื•ื ื”ื‘ื—ื™ืจื” ื•ื”ื™ื™ืฉื•ื ืฉืœ ืกื•ื’ื™ ื”ืจืฉืื•ืช, ืžื” ืฉื ืงืจื ืžืขื ืงื™ื. ื”ืชืจื—ื™ืฉ ื”ื ื•ืกืฃ ืฉืœ ืื™ื ื˜ืจืืงืฆื™ื” ื‘ื™ืŸ ื”ืืคืœื™ืงืฆื™ื” ืฉื ื‘ื—ืจื” ืœืฉืจืช ื”ื”ืจืฉืื” ื™ื”ื™ื” ืชืœื•ื™ ื‘ื”ืขื ืงื” ืฉื ื‘ื—ืจื”. ืชื›ื ื™ืช ืœื“ื•ื’ืžื” ืœื‘ื—ื™ืจืช ื”ืžืขื ืง ื”ื ื›ื•ืŸ ืžื•ืฆื’ืช ื‘ืื™ื•ืจ ืฉืœื”ืœืŸ.

OpenID Connect: ื”ืจืฉืื” ืฉืœ ื™ื™ืฉื•ืžื™ื ืคื ื™ืžื™ื™ื ืžื”ืชืืžื” ืื™ืฉื™ืช ืœืกื˜ื ื“ืจื˜ื™ืช

ืขื‘ื•ืจ ื”ื‘ืงืฉื” ื”ืจืืฉื•ื ื” ืฉืœื ื•, ื”ืฉืชืžืฉื ื• ื‘ืžืขื ืง ื”ื ืคื•ืฅ ื‘ื™ื•ืชืจ, ืงื•ื“ ื”ื”ืจืฉืื”. ื”ื”ื‘ื“ืœ ืฉืœื• ืžืื—ืจื™ื ื”ื•ื ืฉื–ื”ื• ืฉืœื•ืฉื” ืฉืœื‘ื™ื, ื›ืœื•ืžืจ. ืขื•ื‘ืจ ื‘ื“ื™ืงื•ืช ื ื•ืกืคื•ืช. ืจืืฉื™ืช, ื”ืžืฉืชืžืฉ ืžื’ื™ืฉ ื‘ืงืฉื” ืœืื™ืฉื•ืจ ืื™ืฉื•ืจ, ืžืงื‘ืœ ืืกื™ืžื•ืŸ - ืงื•ื“ ื”ืจืฉืื”, ื•ืื– ืขื ื”ืืกื™ืžื•ืŸ ื”ื–ื”, ื›ืื™ืœื• ืขื ื›ืจื˜ื™ืก ืœื ืกื™ืขื”, ืžื‘ืงืฉ ืืกื™ืžื•ืŸ ื’ื™ืฉื”. ื›ืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ื”ืขื™ืงืจื™ืช ืฉืœ ืกืงืจื™ืคื˜ ื”ื”ืจืฉืื” ื”ื–ื” ืžื‘ื•ืกืกืช ืขืœ ื”ืคื ื™ื•ืช ืžื—ื“ืฉ ื‘ื™ืŸ ื”ืืคืœื™ืงืฆื™ื” ืœืฉืจืช ื”ื”ืจืฉืื•ืช. ืชื•ื›ืœ ืœืงืจื•ื ืขื•ื“ ืขืœ ืžืขื ืง ื–ื” ื›ืืŸ.

OAuth ื“ื‘ืงื” ื‘ืชืคื™ืกื” ืœืคื™ื” ืืกื™ืžื•ื ื™ ื”ื’ื™ืฉื” ื”ืžืชืงื‘ืœื™ื ืœืื—ืจ ื”ื”ืจืฉืื” ืฆืจื™ื›ื™ื ืœื”ื™ื•ืช ื–ืžื ื™ื™ื ื•ืจืฆื•ื™ ืœื”ืฉืชื ื•ืช ื›ืœ 10 ื“ืงื•ืช ื‘ืžืžื•ืฆืข. ื”ืขื ืงืช ืงื•ื“ ื”ื”ืจืฉืื” ื”ื™ื ืื™ืžื•ืช ื‘ืŸ ืฉืœื•ืฉื” ืฉืœื‘ื™ื ื‘ืืžืฆืขื•ืช ื”ืคื ื™ื•ืช ืžื—ื“ืฉ, ื›ืœ 10 ื“ืงื•ืช ืœื”ืคื•ืš ืฆืขื“ ื›ื–ื”, ืœืžืขืŸ ื”ืืžืช, ื”ื™ื ืœื ื”ืžืฉื™ืžื” ื”ื›ื™ ื ืขื™ืžื” ืœืขื™ื ื™ื™ื. ื›ื“ื™ ืœืคืชื•ืจ ื‘ืขื™ื” ื–ื• ื™ืฉ ืžืขื ืง ื ื•ืกืฃ - Refresh Token, ืฉื’ื ื‘ื• ื”ืฉืชืžืฉื ื• ื‘ืืจืฆื ื•. ื”ื›ืœ ื™ื•ืชืจ ืงืœ ื›ืืŸ. ื‘ืžื”ืœืš ืื™ืžื•ืช ืžืžืขื ืง ืื—ืจ, ื‘ื ื•ืกืฃ ืœืืกื™ืžื•ืŸ ื”ื’ื™ืฉื” ื”ืจืืฉื™, ืžื•ื ืคืง ืขื•ื“ ืื—ื“ - Refresh Token, ืฉื ื™ืชืŸ ืœื”ืฉืชืžืฉ ื‘ื• ืจืง ืคืขื ืื—ืช ื•ืื•ืจืš ื—ื™ื™ื• ืœืจื•ื‘ ืืจื•ืš ื‘ื”ืจื‘ื”. ืขื Refresh Token ื–ื”, ื›ืืฉืจ ื”-TTL (Time to Live) ืฉืœ ืืกื™ืžื•ืŸ ื”ื’ื™ืฉื” ื”ืจืืฉื™ ืžืกืชื™ื™ื, ื”ื‘ืงืฉื” ืœืืกื™ืžื•ืŸ ื’ื™ืฉื” ื—ื“ืฉ ืชื’ื™ืข ืœื ืงื•ื“ืช ื”ืงืฆื” ืฉืœ ืžืขื ืง ื ื•ืกืฃ. ื”-Refresh Token ื‘ืฉื™ืžื•ืฉ ืžืื•ืคืก ืžื™ื“ ืœืืคืก. ื‘ื“ื™ืงื” ื–ื• ื”ื™ื ื“ื•-ืฉืœื‘ื™ืช ื•ื ื™ืชืŸ ืœื‘ืฆืข ืื•ืชื” ื‘ืจืงืข, ื‘ืื•ืคืŸ ื‘ืœืชื™ ืžื•ืจื’ืฉ ืœืžืฉืชืžืฉ.

3) ื”ื’ื“ืจ ืคื•ืจืžื˜ื™ื ืžื•ืชืืžื™ื ืื™ืฉื™ืช ืฉืœ ืคืœื˜ ื ืชื•ื ื™ื

ืœืื—ืจ ื™ื™ืฉื•ื ื”ืžืขื ืงื™ื ืฉื ื‘ื—ืจื•, ื”ื”ืจืฉืื” ืขื•ื‘ื“ืช, ืจืื•ื™ ืœื”ื–ื›ื™ืจ ืงื‘ืœืช ื ืชื•ื ื™ื ืขืœ ืžืฉืชืžืฉ ื”ืงืฆื”. ืœ- OIDC ื™ืฉ ื ืงื•ื“ืช ืงืฆื” ื ืคืจื“ืช ืขื‘ื•ืจ ื–ื”, ืฉื‘ื” ืืชื” ื™ื›ื•ืœ ืœื‘ืงืฉ ื ืชื•ื ื™ ืžืฉืชืžืฉ ืขื ืืกื™ืžื•ืŸ ื”ื’ื™ืฉื” ื”ื ื•ื›ื—ื™ ืฉืœืš ื•ืื ื”ื•ื ืžืขื•ื“ื›ืŸ. ื•ืื ื”ื ืชื•ื ื™ื ืฉืœ ื”ืžืฉืชืžืฉ ืœื ืžืฉืชื ื™ื ืœืขืชื™ื ืงืจื•ื‘ื•ืช ื›ืœ ื›ืš, ื•ืืชื” ืฆืจื™ืš ืœืขืงื•ื‘ ืื—ืจ ืืœื” ื”ื ื•ื›ื—ื™ื™ื ืคืขืžื™ื ืจื‘ื•ืช, ืืชื” ื™ื›ื•ืœ ืœื”ื’ื™ืข ืœืคืชืจื•ืŸ ื›ืžื• JWT tokens. ืืกื™ืžื•ื ื™ื ืืœื” ื ืชืžื›ื™ื ื’ื ืขืœ ื™ื“ื™ ื”ืชืงืŸ. ืืกื™ืžื•ืŸ JWT ืขืฆืžื• ืžื•ืจื›ื‘ ืžืฉืœื•ืฉื” ื—ืœืงื™ื: ื›ื•ืชืจืช (ืžื™ื“ืข ืขืœ ื”ืืกื™ืžื•ืŸ), ืžื˜ืขืŸ (ื›ืœ ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื) ื•ื—ืชื™ืžื” (ื—ืชื™ืžื”, ื”ืืกื™ืžื•ืŸ ื—ืชื•ื ืขืœ ื™ื“ื™ ื”ืฉืจืช ื•ืชื•ื›ืœื• ืœื‘ื“ื•ืง ืžืื•ื—ืจ ื™ื•ืชืจ ืืช ืžืงื•ืจ ื”ื—ืชื™ืžื” ืฉืœื•).

ื‘ื™ื™ืฉื•ื OIDC, ืืกื™ืžื•ืŸ JWT ื ืงืจื id_token. ื ื™ืชืŸ ืœื‘ืงืฉ ืื•ืชื• ื™ื—ื“ ืขื ืืกื™ืžื•ืŸ ื’ื™ืฉื” ืจื’ื™ืœ ื•ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืืžืช ืืช ื”ื—ืชื™ืžื”. ืœืฉืจืช ื”ื”ืจืฉืื” ื™ืฉ ื ืงื•ื“ืช ืงืฆื” ื ืคืจื“ืช ืขื‘ื•ืจ ื–ื” ืขื ื—ื‘ื•ืจื” ืฉืœ ืžืคืชื—ื•ืช ืฆื™ื‘ื•ืจื™ื™ื ื‘ืคื•ืจืžื˜ J.W.K.. ื•ืื ื›ื‘ืจ ืžื“ื‘ืจื™ื ืขืœ ื–ื”, ืจืื•ื™ ืœื”ื–ื›ื™ืจ ืฉื™ืฉ ื ืงื•ื“ืช ืงืฆื” ื ื•ืกืคืช, ืฉื‘ื”ืกืชืžืš ืขืœ ื”ืชืงืŸ RFC5785 ืžืฉืงืฃ ืืช ื”ืชืฆื•ืจื” ื”ื ื•ื›ื—ื™ืช ืฉืœ ืฉืจืช OIDC. ื”ื•ื ืžื›ื™ืœ ืืช ื›ืœ ื›ืชื•ื‘ื•ืช ื ืงื•ื“ื•ืช ื”ืงืฆื” (ื›ื•ืœืœ ื”ื›ืชื•ื‘ืช ืฉืœ ื˜ื‘ืขืช ื”ืžืคืชื—ื•ืช ื”ืฆื™ื‘ื•ืจื™ืช ื”ืžืฉืžืฉืช ืœื—ืชื™ืžื”), ืžื•ืชื’ื™ื ื•ื”ื™ืงืคื™ื ื ืชืžื›ื™ื, ืืœื’ื•ืจื™ืชืžื™ ื”ืฆืคื ื” ืžืฉื•ืžืฉื™ื, ืžืขื ืงื™ื ื ืชืžื›ื™ื ื•ื›ื•'.

ืœืžืฉืœ ื‘ื’ื•ื’ืœ:

{
 "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, ืืชื” ื™ื›ื•ืœ ืœื”ืขื‘ื™ืจ ืืช ื›ืœ ืกื™ืžื ื™ ื”ื”ื™ื›ืจ ื”ื“ืจื•ืฉื™ื ืœืžื˜ืขืŸ ืฉืœ ื”ืืกื™ืžื•ืŸ ื•ืœื ืœื™ืฆื•ืจ ืงืฉืจ ืขื ืฉืจืช ื”ื”ืจืฉืื” ื‘ื›ืœ ืคืขื ื›ื“ื™ ืœื‘ืงืฉ ื ืชื•ื ื™ ืžืฉืชืžืฉ. ื”ื—ื™ืกืจื•ืŸ ื‘ื’ื™ืฉื” ื–ื• ื”ื•ื ืฉื”ืฉื™ื ื•ื™ ื‘ื ืชื•ื ื™ ื”ืžืฉืชืžืฉ ืžื”ืฉืจืช ืœื ืžื’ื™ืข ืžื™ื“, ืืœื ื™ื—ื“ ืขื ืืกื™ืžื•ืŸ ื’ื™ืฉื” ื—ื“ืฉ.

ืชื•ืฆืื•ืช ื™ื™ืฉื•ื

ืื–, ืœืื—ืจ ื”ื˜ืžืขืช ืฉืจืช OIDC ืžืฉืœื ื• ื•ื”ื’ื“ืจืช ื—ื™ื‘ื•ืจื™ื ืืœื™ื• ื‘ืฆื“ ื”ืืคืœื™ืงืฆื™ื”, ืคืชืจื ื• ืืช ื”ื‘ืขื™ื” ืฉืœ ื”ืขื‘ืจืช ืžื™ื“ืข ืขืœ ืžืฉืชืžืฉื™ื.
ืžื›ื™ื•ื•ืŸ ืฉ-OIDC ื”ื•ื ืชืงืŸ ืคืชื•ื—, ื™ืฉ ืœื ื• ืืคืฉืจื•ืช ืœื‘ื—ื•ืจ ืกืคืง ืงื™ื™ื ืื• ื™ื™ืฉื•ื ืฉืจืช. ื ื™ืกื™ื ื• ืืช Keycloak, ืฉื”ืชื‘ืจืจ ื›ื ื•ื— ืžืื•ื“ ืœื”ื’ื“ืจื”, ืœืื—ืจ ื”ื’ื“ืจื” ื•ืฉื™ื ื•ื™ ืชืฆื•ืจื•ืช ื—ื™ื‘ื•ืจ ื‘ืฆื“ ื”ืืคืœื™ืงืฆื™ื”, ื”ื•ื ืžื•ื›ืŸ ืœื”ืคืขืœื”. ื‘ืฆื“ ื”ืืคืœื™ืงืฆื™ื”, ื›ืœ ืžื” ืฉื ื•ืชืจ ื”ื•ื ืœืฉื ื•ืช ืืช ืชืฆื•ืจื•ืช ื”ื—ื™ื‘ื•ืจ.

ืžื“ื‘ืจื™ื ืขืœ ืคืชืจื•ื ื•ืช ืงื™ื™ืžื™ื

ื‘ืชื•ืš ื”ืืจื’ื•ืŸ ืฉืœื ื•, ื›ืฉืจืช ื”-OIDC ื”ืจืืฉื•ืŸ, ื”ืจื›ื‘ื ื• ื™ื™ืฉื•ื ืžืฉืœื ื•, ืฉื ื•ืกืคื” ืœืคื™ ื”ืฆื•ืจืš. ืœืื—ืจ ืกืงื™ืจื” ืžืคื•ืจื˜ืช ืฉืœ ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื ืื—ืจื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœื•ืžืจ ืฉื–ื•ื”ื™ ื ืงื•ื“ื” ืฉื ื•ื™ื” ื‘ืžื—ืœื•ืงืช. ืœื˜ื•ื‘ืช ื”ื”ื—ืœื˜ื” ืœื”ื˜ืžื™ืข ืฉืจืช ืžืฉืœื”ื, ื”ื™ื• ื—ืฉืฉื•ืช ืžืฆื“ ื”ืกืคืงื™ื ื‘ื”ื™ืขื“ืจ ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ื”ื“ืจื•ืฉื”, ื›ืžื• ื’ื ื ื•ื›ื—ื•ืช ืฉืœ ืžืขืจื›ืช ื™ืฉื ื” ืฉื‘ื” ื”ื™ื• ื”ืจืฉืื•ืช ืžื•ืชืืžื•ืช ืื™ืฉื™ืช ืฉื•ื ื•ืช ืœื›ืžื” ืฉื™ืจื•ืชื™ื ื•ื“ื™ ื”ืจื‘ื” ืฉืœ ื ืชื•ื ื™ื ืขืœ ืขื•ื‘ื“ื™ื ื›ื‘ืจ ืื•ื—ืกื ื•. ืขื ื–ืืช, ื‘ื™ื™ืฉื•ืžื™ื ืžื•ื›ื ื™ื, ื™ืฉื ืŸ ื ื•ื—ื•ืช ืœืื™ื ื˜ื’ืจืฆื™ื”. ืœื“ื•ื’ืžื, ืœ-Keycloak ืžืขืจื›ืช ื ื™ื”ื•ืœ ืžืฉืชืžืฉื™ื ืžืฉืœื” ื•ื”ื ืชื•ื ื™ื ืžืื•ื—ืกื ื™ื ื‘ื” ื™ืฉื™ืจื•ืช, ื•ืœื ื™ื”ื™ื” ืงืฉื” ืœืขืงื•ืฃ ืฉื ืืช ื”ืžืฉืชืžืฉื™ื ืฉืœื›ื. ืœืฉื ื›ืš, ืœ- Keycloak ื™ืฉ API ืฉื™ืืคืฉืจ ืœื›ื ืœื‘ืฆืข ื‘ืื•ืคืŸ ืžืœื ืืช ื›ืœ ืคืขื•ืœื•ืช ื”ื”ืขื‘ืจื” ื”ื“ืจื•ืฉื•ืช.

ื“ื•ื’ืžื” ื ื•ืกืคืช ืœืžื™ืžื•ืฉ ืžื•ืกืžืš, ืžืขื ื™ื™ืŸ, ืœื“ืขืชื™, ื”ื•ื ืื•ืจื™ ื”ื™ื“ืจื”. ื–ื” ืžืขื ื™ื™ืŸ ื›ื™ ื–ื” ืžื•ืจื›ื‘ ืžืžืจื›ื™ื‘ื™ื ืฉื•ื ื™ื. ื›ื“ื™ ืœื”ืฉืชืœื‘, ืชืฆื˜ืจืš ืœืงืฉืจ ืืช ืฉื™ืจื•ืช ื ื™ื”ื•ืœ ื”ืžืฉืชืžืฉื™ื ืฉืœืš ืœืฉื™ืจื•ืช ื”ื”ืจืฉืื•ืช ืฉืœื”ื ื•ืœื”ืจื—ื™ื‘ ืœืคื™ ื”ืฆื•ืจืš.

Keycloak ื•ืื•ืจื™ ื”ื™ื“ืจื” ื”ื ืœื ืคืชืจื•ื ื•ืช ื”ืžื“ืฃ ื”ื™ื—ื™ื“ื™ื. ืขื“ื™ืฃ ืœื‘ื—ื•ืจ ื™ื™ืฉื•ื ืžืื•ืฉืจ ืขืœ ื™ื“ื™ ืงืจืŸ OpenID. ืœืคืชืจื•ื ื•ืช ืืœื” ื™ืฉ ื‘ื“ืจืš ื›ืœืœ ืชื’ ืื™ืฉื•ืจ OpenID.

OpenID Connect: ื”ืจืฉืื” ืฉืœ ื™ื™ืฉื•ืžื™ื ืคื ื™ืžื™ื™ื ืžื”ืชืืžื” ืื™ืฉื™ืช ืœืกื˜ื ื“ืจื˜ื™ืช

ืืœ ืชืฉื›ื— ื’ื ืžืกืคืงื™ื ื‘ืชืฉืœื•ื ืงื™ื™ืžื™ื ืื ืื™ื ืš ืจื•ืฆื” ืœืฉืžื•ืจ ืขืœ ืฉืจืช ื”-OIDC ืฉืœืš. ื”ื™ื•ื ื™ืฉ ื”ืจื‘ื” ืืคืฉืจื•ื™ื•ืช ื˜ื•ื‘ื•ืช.

ืžื” ื”ืœืื”

ื‘ืขืชื™ื“ ื”ืงืจื•ื‘, ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืกื’ื•ืจ ืืช ื”ืชื ื•ืขื” ืœืฉื™ืจื•ืชื™ื ืคื ื™ืžื™ื™ื ื‘ื“ืจืš ืื—ืจืช. ืื ื• ืžืชื›ื ื ื™ื ืœื”ืขื‘ื™ืจ ืืช ื”-SSO ื”ื ื•ื›ื—ื™ ืฉืœื ื• ื‘ืžืื–ืŸ ื‘ืืžืฆืขื•ืช OpenResty ืœ-proxy ื”ืžื‘ื•ืกืก ืขืœ OAuth. ื™ืฉ ื›ืืŸ ื›ื‘ืจ ื”ืจื‘ื” ืคืชืจื•ื ื•ืช ืžื•ื›ื ื™ื, ืœืžืฉืœ:
github.com/bitly/oauth2_proxy
github.com/ory/oathkeeper
github.com/keycloak/keycloak-gatekeeper

ื—ื•ืžืจื™ื ื ื•ืกืคื™ื

jwt.io - ืฉื™ืจื•ืช ื˜ื•ื‘ ืœืื™ืžื•ืช ืืกื™ืžื•ื ื™ JWT
openid.net/developers/certified - ืจืฉื™ืžื” ืฉืœ ื™ื™ืฉื•ืžื™ OIDC ืžืื•ืฉืจื™ื

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”