ααα»ααααΆααααα»αααα αααα»ααααα»αα’αα»αααααααΆαααΈααα OpenID Connect ααΎααααΈαααααααααααΆαα αΌαααααΎαααααΆαααααααα·ααΈααΆααααα»αααΆααααααααααΎαα ααΈααΆαα’αα·ααααααααααΆαααααα½αααααααΎα ααΆαααΆααααα½ααααα»αααα αααΌα ααΎαααΆαααααΆααααααΌααα αααααααΆααααααα½αααααΆααΌαα α ααΆαα αΌαααααΎααααΆαααααααααΆααα½αααααα½ααααααααα·ααααα·ααΆαα―αααααα ααΆαααααααααΆαα αααΆαααΎααΆαα’αα»ααααααΆαα’αα»ααααΆα α’αα»ααααΆαα±ααα’αααααααααααααααααααΆααααααααααα½α ααΆααααα ααΆα αααΎα αα·ααα·αααααΎα±αααα½αααααΆαααααα’αααααΌα αα ααααααααΎααααααα·ααΈααααΈα αα αααα»αα’αααααααα αααα»αααΉααα·ααΆαα’αααΈααΆαααααΆααααααΌαααα αα·αααΆααααΆαααααααΎαααΆααααααααααααΎααααΈαααααα
ααΆααααΈααΌαααΆαααΆααααα αΎα... αααααααααΆααΆαα αΆααααααΎα
ααΆαααΈααα»ααααΆαααααΆααα»α αα ααααααααΆααααααα·ααΈααΆααααα»αα αααΎαααααααααΆααααΆααααααααααααααα ααΎαααΆαααααααααααα·ααΈααΎααααΈαααααααααααΆαα αΌαααααΎαα αααα»ααααα»αα αα»αα ααΆααΊααΆαααααα·ααΈ Rails ααααΆαααααα½α αααααααΆαααα ααΌαααααΆααα·αααααααααααΆαααααααΆαα’αααΈαα»ααααα·α αααααΆαα αΌαααααΎαα»αααΆαααααααααααΌαααΆαααααααα ααΆααααααααα ααΆαα½αααααΆααα ααΎαααΆαααΎαα‘αΎαααΌα SSO ααΈαα½α αααααα’ααααΎααΆααααααααααΆαααααααΆαααααΆααααΈαααααααααΆααααααΆαααΈαααααα αα·ααααΆαααΈαααα’αα»ααααΆα αααααΆαααααΆααααααΌαααΆααααααΌααααα»ααααααααααααΆαα’αα·αααααΈαααΆαα½αααΉααααΆαααΆααααααααΆα αααΎα αα·αααΆααααααααααΆαααα ααΎαααΆαααΈαααα’αα»ααααΆαα ααααα·ααααααΆαααααΎαααααΆααααα½ααααα»αααααα αααααΆααααααα·ααΈααΆααααα»αααΈαα½ααααααΌααα·αααααΆα’αααΈαααααΆαααααααααΉααααααΆαααααααααα·ααααΆ α αΎαααΌαααααΆααα·αααααααα»ααααα·αααααΌαααΆαααααΎααααΆαααααααΆαααααα»αααΆαα½ααααΆαααΈαααα’αα»ααααΆαα
αααααΆααααΈααααααα ααΎαααΆααααααα α α·αααααααα½ααα·α αα ααΆαααααΆαα’αα»ααααΆαααΈααααα·αα SSO ααααΌαααΆαααααααα α’ααααα»αααααΆαα αααααΆααααα½αααΈ OpenResty ααααΌαα½αααααΌαααΆααααααααα Lua ααααα·αα·ααααααααΆαααααΆαα ααΉαααΆαααααα·ααΈααΆαα½ααααααααΎααΉααα α αΎαα’αΆα αα·αα·αααααΎαααΆααΎααΆαααΆαα αΌαααααΎαα ααΈααααααα¬ααα αα·ααΈααΆααααααααααΆαααααα½ααααΆαααααΆαααααααΆααα·α αα ααααΆααααααααααααΆαα αΌαααααΎαααααα·ααΈααΆααααα»α - αα αααα»αααΌααααααααα·ααΈααΈαα½αα ααΆαα·αα αΆαααΆα ααααα»αααΆααααααΆαααααα·ααααΆαααααααααααα ααΆαααααα ααΎαααΆααα·αα ααΆα αααααΆααααα α αΎααααααα·ααΈαααα½αα―ααα·αααΆαααΉαα’αααΈααΆααα’ααα’αααΈααΆαα’αα»ααααΆαα
ααααααΆαααΆααααα αααα αΆαα½ααα αααα·αα’αΆα αααααααΆαααΆαα α α»ααααααα·ααΈαααααααΌαααΆαααααααΆαα’αααΈαα»ααααα·α? ααΆα’αΆα αα αα½α αααα»αααΆαααααα API αααααΆααααααΆααααα’αα»ααααΆα ααα»αααααααααΆααααα’αααααΉαααααΌααααααααααααα·ααααΆαααααααααααΆαααααααα·ααΈααΈαα½ααα ααΎαααΈααα ααΎαα αααααα αΆααααΆαααΉαααα’ααααΎαααααα·ααΈααααααααααααααα½αα―ααα½αααααααΎα ααααααααααααααΌαααΆααααααααα ααΆ OpenSource αα ααΎαααΆαααΈαααα’αα»ααααΆαααΆααααα»αααααααΎαα ααΎαααΉααα·ααΆαα’αααΈααΆαα αααααααααααα OAuth ααΆαααααΆαααΆαααααααααΆαα αααααααα αΆααΆααααΈαα
αα ααΉααααααααΆαααΌαα
OAuth ααΊααΆαααααααΆαααΆαα’αα»ααααΆααααα’αΆα αααααΆα αααααααΌαααΆαααα½αααααΆααΌαα ααα»αααααααααΆααααα»αααΆαααααααΆαα·αααΆαααααααααααΆαα αα½αααααΆαα αΆααααααΎααα·α αΆαααΆααΎ OpenID Connect (ODC) ααααΆααα OIDC αααα½αααΆααΊααΆααΆαα’αα»ααααααΈααΈαααααααααΆαααΆααααααααααΆααααΎαα αα αααααΆαα αΌαα αΌααα αααα»ααααααα·ααΈααααααααΎαα·ααΈααΆα OAuth 2.0 (αα·ααΈααΆαα’αα»ααααΆαααΎαα αα )α αααααααααΆαααααα·ααααα αΆααααααααα·ααααααα’αααΈα’αααααααΎααααΆααα α»αααααα α αΎααααααΆααααααΎα±ααααΆα’αΆα ααααΆααααααΌαα’ααααααααααΆαα’αα»ααααΆααααααα
αααααΆαααΆαααΆααααα ααΎααα·αααΆαααααΎαααΎαα’ααααααααααααΆααΆααααΆααααΆαα½ααα α αΎαααΆααααααα α α·αααααααααααΆααα½ααααα αΌαααΆαα½α ODC αααααΆαααααΆαααΈααααααααΆαααΆαα’αα»ααααΆαααααααΎαα αα αααα»αααΆααααα α·αααααααΆααααααα α α·ααααααααΊααΆααα·ααααααΆ ODC ααΆαααΆαααααααααααΆαααα αααα»αααααααααααααΆαα’αα»ααααΆαα’αααααααΎααααΆααα α»ααααααα ααΌα αααα ααΆα’αΆα α’αα»ααααααΆαααΆαααα ODC αα ααΎαααΆαααΈαααα’αα»ααααΆααα αα α»ααααααααααα’αααα
αα·ααΈααααααΎααααα»αααΆαα’αα»αααααααΆαααΈααα ODC ααααΆαααααα½αααααααΎαα
1) ααΆααααα·αααααααα αααααααααα ααααΆα
ααΎααααΈαα½ααααα
αΌα ODC ααΆα
αΆαααΆα
ααααα»αααΆαααΆααααα·ααααααα’αααααααΎααααΆαααα
αα
α»αααααααα
ααΆαααααααααα’αΆα
αααααΆαααααααααααΆαα αα
αααα»α ODC αααααααΌαααΆαααα α
ααΆααΆαααΆαααΆαα ααΆαααΆαααΆαααΊααΆααΆαα
α»ααααααααααααΆαααα
αααα»αααΌαααααΆααα·ααααααα’αααααααΎααααΆαα (ααααα α’ααΈααα ααΌααααααααα)α ααΆα
αααα»ααααααααΆαααααΆααααααΌαααΆααααα αΌαααααΆαα αααα»ααααα»αααααΆαααααα - αα·ααΆαααΆαα αααα»αα’αα‘α»ααααα’αα»ααααΆα ααΆαα αΌαααααΎααΊαα·αααααΌαααΆαααααΎαα»αα αααααααΆαααΆααααΆααααΆαα½αα‘αΎα ααα»ααααα αααααα·ααΆαααΆα ααΎαααααΈααΆαααΆααα½αα ααα½αααΈαα·ααΆαααΆααα·αααααΌαααΆααααααα
2) α’αα»αααααααα½αα αΆαααΆα α
ααααααααααΆαααααααΆα αααααα ODC ααΊααΆαααααΎαααΎα αα·αααΆαα’αα»ααααααααααααΆαα’αα»ααααΆα αααα α ααΆαααα½αα ααααΆααΈαααΌαααααααααααα’αααααααααααΆααααααα·ααΈαααααΆαααααΎαααΎα αα·ααααΆαααΈαααα’αα»ααααΆαααΉαα’αΆαααααααΎαααα½ααααααΆαααααΎαααΎαα αααααααΆαααααααΌαααααΆααααΆαααααΎαααΎααααα½ααααααααΉαααααΌαααααΌαααΆααααα αΆααα αααα»αααΌαααΆαααΆααααααα
αααααΆααβαααααα·ααΈβααααΌαβααααβααΎα ααΎαβααΆαβααααΎβαααα½αβααΌαα
βαααα»αβααΊβααΌαβα’αα»ααααΆαα ααΆααα»αααααΆααααααΆααΈα’ααααααααΊααΆααΆααΆααΈααα αΆα i.e. αααα»αααααααΆααααΆαααααΎαααααααααααα ααααΌα α’αααααααΎααααΆααααααΎααΆαααααΎαα»αααΆαα’αα»ααααΆαααΆαα’αα»ααααΆα ααα½αααΆααααααΆαααααΆαα - αααααΌαα’αα»ααααΆα αααααΆααααααΆαα½αααΉααααααΆαααααΆααααα ααΌα
ααΆααααα·αααΎααΆααααα»ααααααααΆααααΆαααααΎααααΎα ααααΎαα»ααα·αα·ααααααααΆα
αΌαααααΎαααΆαα α’ααααααααααααΆααααΆααα’ααααααααααΈαα’αα»ααααΆααααααΊααα’ααααΎααΆααααααΌααααααααΆααααααα·ααΈ αα·ααααΆαααΈαααααααααα·αααα·α α’αααα’αΆα
α’αΆαααααααα’αααΈαααα½ααααα
OAuth αααααΆααααααΆααααΌαααααααα·ααααααΆαααααΆα αΌαααααΎαααααα½αααΆααααααΆααααΈααΆαα’αα»ααααΆααα½αααααΆααααααα’αΆαααα α αΎααα½αααααααΆααααααΌα ααΆαααααΆαα 10 ααΆααΈααΆαααααα ααΆαααααααααααΌαα’αα»ααααΆαααΊααΆααΆααααααααααΆααααΈααα αΆαααΆααααααΆααααααΌααααα αααααΆαα 10 ααΆααΈαααα ααΎααααΈααααααααα αΆααααααα αα·ααΆααααααααααα αα·ααααααΆαα·α αα ααΆαααααΈαααΆααααα»ααααααΆααααααααααααα ααΎααααΈαααααααΆααααα αΆααα ααΆααααα½ααα½ααααααΊ Refresh Token αααααΎαααααΆααααααΎαα αααα»αααααααααααααΎααααααα α’αααΈαααΊααΆααααα½αααΆααα ααΈαααα αααα»αα’αα‘α»αααααααααααααΆααααΈααΆαααααααααα½ααα½ααααααααα ααααααααΈααΎαααααΆαααααΆααα αΌαααααΎααααΆαα αα½αααααααααααααΌαααΆαα αα - ααααΎα±αααααααααΌααΉααααα’αΆα ααααΎααΆαααααααααα α αΎαα’αΆαα»ααΆαααααααΆααΆααααααΆααΌαααΆααααα ααΆαα½αααΉα Refresh Token ααα αα αααααα TTL (Time to Live) αα token α αΌαααααΎαααΆαααααΆαααααα αα ααααΎααα»ααααααΆαααααΆααα αΌαααααΎααααΈααΉααααααα ααα»α αααα αααααααα½αααααααααα αα·αα·ααααααααΆααααΎα±ααααααααααααΆαααααΎααααΌαααΆααααααα‘αΎααα·αααααΆαααα ααΌαααα ααΆααααα½ααα·αα·ααααααααΊααΆαααΈαααα αΆα α αΎαα’αΆα ααααΌαααΆαα’αα»αααααα αααα»αααααααΆααααααααααα·αα’αΆα αααααΆαα ααααα’αααααααΎααααΆααα
3) αααα ααααααααααΆααααααααα·ααααααααααΆαααααα½α
αααααΆααααΈαααα½ααααααΆαααααΎαααΎαααααΌαααΆαα’αα»αααα ααΆαα’αα»ααααΆαααααΎαααΆα ααΆααΆαααααααα·ααΆαα’αααΈααΆαααα½αααΆααα·ααααααα’αααΈα’αααααααΎααααΆααα α»ααααααα ODC ααΆαα ααα»α αααα ααααΆα ααααα‘αααααααΆαααααα αΆααα αααα’αααα’αΆα ααααΎαα»ααα·ααααααα’αααααααΎααααΆααααΆαα½αααΉααααααΆαααααΆααα αΌαααααΎαα αα α»ααααααααααα’ααα α αΎαααααα·αααΎααΆααΆααααααα α αΎαααααα·αααΎαα·ααααααααααα’αααααααΎαα·αααααΆααααααΌαααΉαααΆαααα α αΎαα’αααααααΌαααααΎααΆαααααααΆααα αα α»ααααααααΆα αααΎααα α’αααα’αΆα αααααααααααααΆαααΌα ααΆ JWT tokensα αα·αα·ααααααααΆααΆαααααααααααΌαααΆαααΆααααααααααααααΆααααααα αα·αα·ααααααααΆ JWT αααα½αααΆααΆαααΈαααααα ααααααΆ (ααααααΆαα’αααΈαααααΆαααααΆαα) ααααα»α (αα·ααααααα αΆαααΆα αααΆαα½α) αα·αα αααααααΆ (α αααααααΆ αααααΆαααααΆααααααΌαααΆαα α»αα αααααααΆααααααΆαααΈααα α αΎαα’αααα’αΆα αα·αα·αααααΎααααααααα αααααααΆααααααΆαα αααααααα) α
αα
αααα»αααΆαα’αα»αααα ODC αα·αα·ααααααααΆ JWT ααααΌαααΆαααα α
ααΆ id_token α ααΆα’αΆα
ααααΌαααΆαααααΎαα»ααα½αααΆαα½αααΉααα·αα·ααααααααΆα
αΌαααααΎααααααΆ α αΎαα’αααΈααααα
ααααααααΊααΎααααΈαααααααααΆααα αααααααΆα αααΆαααΈααααααααααΆαα’αα»ααααΆαααΆαα
ααα»α
αααα
ααααΆα
ααααα‘αααααααΆααααΆααΆαα½αααΉαααααΆααΆαααααΆα
αααΎααα
αααα»ααααααα
α§ααΆα ααααα ααΎ 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 αα token αα·ααα·αααΆαααααααΆαααΈαααα’αα»ααααΆαααΆαααααααΎααααΈααααΎαα»ααα·ααααααα’αααααααΎααααΆααα αα»ααα·ααααα·αααα·ααΈααΆααααααααααΊααΆααΆαααααΆααααααΌααα·ααααααα’αααααααΎααααΆααααΈαααΆαααΈααααα·αααααααΆαααα ααα»αααααα½αααΆαα½αααΉααααααΆαααααΆααα αΌαααααΎααααΈα
ααααααααααΆαα’αα»αααα
ααΌα
αααααααααΆααααΈα’αα»αααααααΆαααΈααα ODC ααααΆαααααα½αααααααΎα αα·αααααααα
ααΆααααααααααΆααααααΆαααα
ααΆαα
ααααααααααα·ααΈ ααΎαααΆααααααααΆααααα αΆααααΆααααααααααααΆαα’αααΈα’αααααααΎααααΆααα
αααααΆα ODC ααΊααΆαααααααΆαααΎαα
αα ααΎαααΆααααααΎααααα»αααΆαααααΎαααΎαα’ααααααααααααΆαααααΆαααααΆαα α¬ααΆαα’αα»αααααααΆαααΈαααα ααΎαααΆαααΆααααα Keycloak αααααΆααΆαααΆαααΆααααα½ααααα»αααΆαααααααα
ααΆαααααααα αααααΆααααΈααΆαααα‘αΎα αα·αααααΆααααααΌαααΆααααααααΆαααααΆαααα
ααΎααααααααααα·ααΈ ααΆαα½α
ααΆαααααα»αααΆαααααΎαααΆαα αα
αααααααΆααααααα·ααΈ α’αααΈααααα
ααααααααΊααααΌαααααΆααααααΌαααΆααααααααΆααααααΆααα
αα·ααΆαα’αααΈαααααααααΆααααααΆαααααΆαα
αα αααα»αα’αααααΆαααααααΎα αααα»αααΆαααΆαααΆαααΈααα ODC ααααΌα ααΎαααΆααααααΌααααα»αααΆαα’αα»ααααααααΆααααααααΎα αααααααΌαααΆααααααααααααααΆαααΆαα αΆαααΆα αα αααααΆααααΈααΆααα·αα·αααα‘αΎααα·ααααα’α·ααααααααααααΆααααααααααα½α ααΆααααα αααααααα ααΎαα’αΆα αα·ααΆαααΆαααΆαααααΊααΆα ααα»α αααΎαα αα αααα»αααΆααααα α·αααααααΆααααααα α α·ααααααα»αααΆαα’αα»αααααααΆαααΈααααααααα½ααα ααΆαααΆααααα½αααΆααααα αααααααααααα’ααααααααααααΆαααα»αααααΈααααα·αααΆααα»αααΆαα αΆαααΆα α ααααΌα ααΆααααααΆαααααααααααα αΆαααααααΆαααΆαα’αα»ααααΆαααααΆαααααα½ααα»ααααααΆαααααΆααααααΆαααααα½αα ααα½α αα·αα αααΎαααΆααα αα·ααααααα’αααΈαα»ααααα·αααααΌαααΆααααααΆαα»ααα½α α αΎαα αααααΆαααΆαααΆααααα αα αααα»αααΆαα’αα»αααααααααααααα½α ααΆααααα ααΆαααΆαααΆααααα½ααααα»αααΆαααααΎαααΆα ααααααα α§ααΆα ααα Keycloak ααΆααααααααααααααααααα’αααααααΎααααΆααααααΆαααααα½α α αΎααα·ααααααααααΌαααΆααααααΆαα»ααααααααΆαααα αααα»αααΆ α αΎαααΆααΉααα·ααα·ααΆααααα»αααΆαααααααα’αααααααΎααααΆααααααα’ααααα ααΈαααααα ααΎααααΈααααΎααΌα ααα Keycloak ααΆα API αααααΉαα’αα»ααααΆαα±ααα’αααα’αα»αααααααααααΆααααααα αΆαααΆα αααΆααα’ααα
α§ααΆα ααααα½ααααααααΆααααααΆααααααα½αα±ααα αΆααα’αΆαααααααα αααα»ααααα·ααααααααα»αααΆαα’αα»ααααααΊ Ory Hydra α ααΆαα½αα±ααα αΆααα’αΆαααααααααααααΆααΆααααΆαααΆαα»ααααααααααΆα ααΎααααΈαα½ααααα αΌα α’αααααΉαααααΌαααααΆααααααΆαααααααααααααα’αααααααΎααααΆααααααα’ααααα ααααΆααααα’αα»ααααΆααααααα½ααα α αΎαααααααΆααααααΌαααΆαα
Keycloak αα·α Ory Hydra αα·ααααααΆαααααααααΆααααα½αααααααααα ααΆααΆααΆαααα’αααα»ααααα»αααΆαααααΎαααΎαααΆαα’αα»ααααααααααααΆαααααααΌααα·αα· OpenID α αααααααααΆαααΆαααααααΆααααααΆααΆαααααΆααααααΆαα·ααααΆααααααα OpenID α
αα»αααααα α’αααΈα’ααααααααααααΆαααααααΆαααααααΆαααααΆαα ααααα·αααΎα’ααααα·αα αααααααΆαααΆαααΈααα ODC ααααα’αααα αααααααααααααΆααααααΎαααα’ααΆα αααΎαα
ααΆαβα’αααΈβαααααΆαα
ααΆαααα’ααΆααααααααΈααΆααα»αααα ααΎαααΉααα·αα
ααΆα
ααααα
ααΆααααααΆααααααΆααααα»αααΆααααααααααα ααΎαααΆαααααααααααα SSO αα
αα
α»ααααααααααααΎααα
ααΎαααα»ααααααααααΎ OpenResty αα
ααααΌααααΈαααααα’ααααΎ OAuth α ααΆααααααααααΆααααααααααα½α
ααΆααααα
ααΆα
αααΎααα
ααΈααα α§ααΆα αααα
ααααΆαααααααα
ααααα: www.habr.com