ááœááºáá²á·áá±á¬áá¡áááºážáááºáá áá»áœááºá¯ááºááẠáá»áœááºá¯ááºááá¯á·áá¡ááœááºážááá¯ááºážá¡ááá®áá±ážááŸááºážáá¬áá±á«ááºážáá»á¬ážá áœá¬á¡ááœáẠáááºáá±á¬ááºááœáá·áºááá¯á á®áá¶ááá·áºááœá²ááẠOpenID Connect áá¬áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºáá±áá«áááºá áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºááá¯ážáááºááŸá¯áá»á¬ážááŸá áá±ážáááºáá±á¬á¡ááá¯ááºážá¡áá¬ááŒáá·áº á¡áááºááŒá±áá±á¬á áá»áœááºá¯ááºááá¯á·ááẠáá±áá°áá»áááºáá¶áá¬ážáá±á¬á á¶ááŸá¯ááºážáá áºáá¯ááá¯á· ááŒá±á¬ááºážááœá¬ážáá«áááºá áááá¯áááºáá±á¬ááºááŸá¯ááŸáá áºááá·áº áááºáá±á¬ááºá¡áá¯á¶ážááŒá¯ááŒááºážááẠááœá®ážáá±á«á·áá±á«á·áá±á«á·áá±áá±á¬ áá¯ááºáááºážáá±á¬ááºáá¬áá»á¬ážááᯠáá»á¬ážá áœá¬ááá¯ážááŸááºážá á±ááŒá®áž ááœáá·áºááŒá¯áá»ááºáá»á¬ážá¡á¬áž á¡áá±á¬ááºá¡áááºáá±á¬áºáá¬ááœáẠáá¯ááºáá»á ááááºááᯠáá»áŸá±á¬á·áá»áá±ážáᬠá¡áááºááá·áºáá¯ááºáá¬ážááá·áº ááŒá±ááŸááºážáá»ááºáá»á¬ážá áœá¬ááᯠááŸá¬ááœá±ááá¯ááºáᬠá¡áá áºáá»á¬ážááᯠáá®ááœááºááá·áºá¡áá«ááœáẠááá·áºáŠážááŸá±á¬ááºáá»á¬ážááᯠááŸá±á¬ááºááááºááá±á á±áá«á á€áá±á¬ááºážáá«ážááœááºá áá»áœááºá¯ááºááẠá€á¡áá°ážá¡ááŒá±á¬ááºážááŸáá·áº ááŒáá·áºá áœááºááẠá á®áá¶áá¬ážáá±á¬ á¡áá¯á¡áá áºáá»á¬ážá¡ááŒá±á¬ááºáž ááœá±ážááœá±ážáá«áááºá
ááá¯ážá¡áááºááááºážá⊠á¡á¬ážáá¯á¶ážáááºááá¯á áá²á·áá²á
ááœááºáá²á·ááá·áºááŸá áºá¡áááºážáááºáá manual control á¡ááœáẠinternal applications áá»á¬ážááœááºážáá±á¬á¡áá«á áá¯áá¹ááá®á¡ááœááºáž áááºáá±á¬ááºááŸá¯ááᯠááááºážáá»á¯ááºááẠá¡ááºááá®áá±ážááŸááºážáá áºáᯠáá±ážáá²á·áááºá áááºážááẠáááºáááºážáá»á¬ážá á¡áá»ááºá¡áááºáá»á¬ážáá«ááŸááá±á¬ áá±áá¬áá±á·á áºáá áºáá¯ááá¯á· áá»áááºáááºáá¬ážááá·áº ááá¯ážááŸááºážáá±á¬ Rails á¡ááºááá®áá±ážááŸááºážáá áºáá¯ááŒá áºááŒá®áž á¡áá»áá¯ážáá»áá¯ážáá±á¬ áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá»á¬ážááᯠáááºáá±á¬ááºááŒáá·áºááŸá¯ááá¯ááºááẠá á®á ááºáá±ážáá¬ážáááºá áá áºáá»áááºáááºážááŸá¬áááºá client ááŸáá·áº authorization server áááºá០ááá¯áááºáá»á¬ážááᯠá¡áááºááŒá¯ááŒááºážá¡áá±á«áº á¡ááŒá±áá¶áá¬ážááá·áº ááá SSO ááᯠááŒáŸáá·áºáááºáá²á·ááŒá®ážá ááá¯áááºááᯠáá±á¬ááºáá»á¬ážá áœá¬ááŒáá·áº áá¯ááºááŸááºáá¬ážáá±á¬ áá¯á¶á á¶ááŒáá·áº ááá¯á·ááŒá®áž ááœáá·áºááŒá¯áá»ááºáá¬áá¬ááœáẠá¡áááºááŒá¯áá«áááºá á¡ááœááºážá¡ááá®áá±ážááŸááºážáá áºáá¯á á®ááẠáá¯áá¹áááá±áá¡ááœáŸá¬áá áºáá¯á á®ááᯠáá±á¬áºááŒááááºááŒá áºááŒá®ážá áááºáááºážáá±áá¬áá±á·á áºáá»á¬ážááẠááœáá·áºááŒá¯áá»ááºáá¬áá¬ááŸáá·áº áá¯á¶ážááááºáá°áá»áá±á¬ááŒá±á¬áá·áº áááºážááẠá¡áááºááŒá±áá¯á¶ážááœá±ážáá»ááºááŸá¯ááá¯ááºáá±á
á¡áá»áááºá¡áá±á¬áºááŒá¬ááŒá®ážáá±á¬ááºá áááá¯áá»á¯ááºááá¯ááºááŸá¯ááŒá¯ááŒááºážá áá¯ááºáááºážáá¬áááºááᯠááá¯ážááŸááºážá á±ááẠáá¯á¶ážááŒááºáá²á·áááºá SSO ááᯠbalancer ááá¯á· ááœáŸá²ááŒá±á¬ááºážáá±ážáá²á·áá«áááºá OpenResty áá¡áá°á¡áá®ááŒáá·áºá ááá¯áááºáá»á¬ážááá¯á á áºáá±ážááá·áº Lua ááœáẠáá¯á¶á á¶áááááºáá áºáá¯ááá·áºááœááºážáá²á·áááºá áááºááá·áºáá»áŸá±á¬ááºááœáŸá¬ááá¯áá±á¬ááºážááá¯áááºááá¯ááááŸáááŒá®áž ááá¯áá±áá¬ááœááºáááºáá±á¬ááºááœáá·áºááŸááááŸáá á áºáá±ážááá¯ááºáááºá á€áá»ááºážáááºááŸá¯ááẠá¡ááœááºážááá¯ááºážá¡ááá®áá±ážááŸááºážáá»á¬ážááá¯á·áááºáá±á¬ááºááœáá·áºááá¯ááááºážáá»á¯ááºááŒááºážááá¯ááºáááºážáá¬áááºááá¯á¡ááœááºááá¯ážááŸááºážá á±ááẠ- á¡ááá®áá±ážááŸááºážáá áºáá¯á á®ááá¯ááºááœááºá á¡ááá¯áá¯áá¹ááááá¯áá±á¬áºááŒáááºáááá¯á¡ááºáá±á¬á·áá«á ááááºá¡áá±ááŒáá·áº áá»áœááºá¯ááºááá¯á·ááẠá¡ááœá¬ážá¡áá¬ááᯠááŒááºáááœáẠááááºáá²á·ááŒá®áž á¡ááá®áá±ážááŸááºážááá¯ááºááá¯ááºá ááœáá·áºááŒá¯áá»ááºááŸáá·áº áááºáááºá áá¬á០ááááá²á·áá«á
ááá¯á·áá±á¬áºáááºáž ááŒá¿áá¬áá áºáá¯á áááŒá±ááŸááºážááá¯ááºáá±ážáá«á áááºáááºážááœá±á¡ááŒá±á¬ááºáž á¡áá»ááºá¡áááºááœá± ááá¯á¡ááºáá±áá²á· áá»áŸá±á¬ááºááœáŸá¬ááœá±áá±á¬á ááœáá·áºááŒá¯áá»ááºáááºáá±á¬ááºááŸá¯á¡ááœáẠAPI áá áºáá¯ááᯠáá±ážááá¯ááºáá±á¬áºáááºážá ááá¯á·áá±á¬áẠáááºážá¡ááá®áá±ážááŸááºážáá áºáá¯á á®á¡ááœáẠá¡ááá¯áá¯áá¹ááááᯠááá·áºááœááºážááááºááŒá áºáá«áááºá ááá¯á·á¡ááŒááºá áá»áœááºá¯ááºááá¯á·ááẠáá»áœááºá¯ááºááá¯á·áá¡ááœááºážááá¯ááºážááœáá·áºááŒá¯áá»ááºáá¬áá¬ááœáẠáá±á¬ááºááá¯ááºážááœáẠOpenSource ááá¯á· áá¬áá¬ááŒááºááá¯ááá·áº áá»áœááºá¯ááºááá¯á·ááá¯ááºááá¯ááºáá±ážáá¬ážáá±á¬ á¡ááá®áá±ážááŸááºážáá áºáá¯á¡áá±á«áº ááŸá®ááá¯ááŸá¯ááᯠáááºááŸá¬ážááá¯áá«áááºá á¡á²áá«ááᯠáááŒá¬ážá¡áá»áááºááœá±ááŸá¬ ááŒá±á¬áá«áááºá ááŒá¿áá¬ááŸá áºáá¯áá¯á¶ážá¡ááœáẠá¡ááŒá±ááŸá¬ OAuth ááŒá áºáááºá
áá¯á¶á á¶ááŸá¯ááºážáá»á¬ážááá¯á·
OAuth ááẠáá¬ážáááºááá¯ááºáá±á¬á áá±áá¯áá»á¡á¬ážááŒáá·áº áááºáá¶áá¬ážáá±á¬ ááœáá·áºááŒá¯áá»ááºá á¶ááŸá¯ááºážáá áºáá¯ááŒá áºáá±á¬áºáááºáž áááºážááá¯ááºáá±á¬ááºááá¯ááºá áœááºážáá áºáá¯áááºážááŸáá·áº ááá¯á¶áá±á¬ááºáá±á¬ááŒá±á¬áá·áºá áááºážááá¯á·ááẠOpenID Connect (ODC) ááᯠáá»ááºáá»ááºážá áááºá ááºážá á¬ážáá¬ááŒáááºá OIDC ááá¯ááºááá¯ááºá OAuth 2.0 áááá¯ááá¯áá±á¬ (á¡ááœáá·áºááœáá·áºááŒá¯áá»áẠáááá¯ááá¯áá±á¬) ááœáẠá¡ááá¯áááá¯ááááºáá áºáá¯ááá¯á· á á®ážáááºážááœá¬ážááá·áº ááœáá·áºáááºážá¡áá±á¬ááºá¡áá¬ážá áá á áºááŒááºážá á¶á ááááááŒá±á¬áẠá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááŒá áºáááºá á€ááŒá±ááŸááºážáá»ááºááẠá¡áá¯á¶ážááŒá¯áá°ááŸáá·áºáááºáááºááá·áº áá±áá¬áááŸáááŒááºážááŒá¿áá¬ááᯠááááºá á±ááŒá®áž ááœáá·áºááŒá¯áá»ááºáá±ážáá°ááᯠááŒá±á¬ááºážáá²á á±áá«áááºá
ááá¯á·áá±á¬áºá áá»áœááºá¯ááºááá¯á·ááẠáá®ážááŒá¬ážáá¶á·ááá¯ážáá±ážáá°ááᯠáááœá±ážáá»ááºáá² áá»áœááºá¯ááºááá¯á·á áááºááŸáááœáá·áºááŒá¯áá»ááºáá¬áá¬á¡ááœáẠODDC ááŸáá·áº áá±á«ááºážá ááºážááẠáá¯á¶ážááŒááºáá²á·áááºá á€áá¯á¶ážááŒááºáá»ááºááᯠáá±á¬ááºáá¶ááá·áºá¡áá»ááºááŸá¬ ODC ááẠáá¯á¶ážá áœá²áá°ááœáá·áºááŒá¯áá»ááºá á ááºážáááºážáá»ááºáá»á¬ážá á¡ááœááºááá¯ááºáá»á±á¬áá®ááœá±ááŸááá±á¬ááŒá±á¬áá·áºááŒá áºáááºá ááá¯á·ááŒá±á¬áá·áºá áááºááááºááŸáááœáá·áºááŒá¯áá»ááºáá¬áá¬ááœáẠODDC áá¶á·ááá¯ážááŸá¯ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠááŒá áºááá¯ááºáááºá
áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠODC áá¬áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááá·áºáááºážáááºáž
1) Data áá»á¬ážááᯠááá¯áá»ááºáá±á¬áá¯á¶á á¶ááá¯á· áá°áá±á¬ááºááœá¬ážáá«á
ODC ááᯠáá±á«ááºážá
ááºážáááºá áááºááŸáá¡áá¯á¶ážááŒá¯áá°áá±áá¬ááᯠá
á¶ááŸá¯ááºážááŒáá·áº áá¬ážáááºááá¯ááºáá±á¬ áá¯á¶á
á¶ááá¯á· áá°áá±á¬ááºáá¬ááẠááá¯á¡ááºáá«áááºá OIDC ááŸá¬ áá«ááᯠáá±á¬ááºážááá¯áá»ááºááá¯á· áá±á«áºáá«áááºá á¡áá±ážááá¯ááŸá¯áá»á¬ážááẠáá¯á¶ážá
áœá²áá°áá±áá¬áá±á·á
Ạ(á¡áááºá á¡á®ážáá±ážááºá áá¯ááºážá á
áááº) ááœáẠáááŸááááŒá
Ạáá±á¬ááºáá¯á¶ážá¡ááœááºáá»á¬ážááŒá
áºáááºá ááŸááá±áááºá
á¡ááŸááºá¡áá¬ážá¡á¯ááºá á¯ááᯠá¡á±á¬ááºáá«á¡á á¯ááœá² - áááºáááºááœáẠáá±á«ááºážá ááºáá¬ážáááºá ááœáá·áºááŒá¯áá»ááºáá ááºá¡ááœááºážá á¡áá»áá¯á·áá±á¬á¡ááŸááºáá¶ááááºáá»á¬ážá០áááá¯á¡ááºáá±á¬áºáááºážá áááºáááºá¡áá®ážáá®ážá០á¡ááŸááºáá¶ááááºáá»á¬ážááá¯á· áááºáá±á¬ááºááœáá·áºááᯠáá±á¬ááºážááá¯áá¬ážáááºá
á) ááá¯á¡ááºáá±á¬ áá±á¬ááºáá¶á·ááœá±áá»á¬áž áá±á¬ááºááœááºáá±ážááŒááºážá
ODC áá±á«ááºážá ááºážááŸá¯á áá±á¬ááºá¡ááá¯ááºážááŸá¬ áá±á¬ááºáá¶á·ááŒá±ážáᯠáá±á«áºáá±á¬ ááœáá·áºááŒá¯áá»ááºá¡áá»áá¯ážá¡á á¬ážáá»á¬ážááᯠááœá±ážáá»ááºááŒááºážááŸáá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºáž ááŒá áºáááºá ááœá±ážáá»ááºáá¬ážááá·áº á¡ááá®áá±ážááŸááºážááŸáá·áº ááœáá·áºááŒá¯áá»ááºáá¬áá¬á¡ááŒá¬áž á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯á¡ááŒá±á¡áá±ááẠááœá±ážáá»ááºáá¬ážáá±á¬ áá±á¬ááºáá¶á·ááŸá¯á¡áá±á«áº áá°áááºáááºááŒá áºáááºá ááá·áºáá»á±á¬áºáá±á¬ áá±á¬ááºáá¶á·ááŒá±ážááᯠááœá±ážáá»ááºáááºá¡ááœáẠá á¶ááá°áá¬ááŒá¯ á¡á á®á¡á ááºááᯠá¡á±á¬ááºáá«áá¯á¶ááœáẠááŒáá¬ážáááºá
áá»áœááºá¯ááºááá¯á·áááááá¯á¶ážáá»áŸá±á¬ááºááœáŸá¬á¡ááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡áá¯á¶ážá¡áá»á¬ážáá¯á¶ážáá±á¬ááºáá¶á·ááŒá±ážááŒá
áºááá·áº Authorization Code ááá¯á¡áá¯á¶ážááŒá¯áá²á·áááºá áááºážáááŒá¬ážáá¬ážáá»ááºááŸá¬ áááºážááẠá¡ááá·áºáá¯á¶ážááá·áºááŒá
áºáááºá ááá¯ááá¯áááºááŸá¬á áá±á¬ááºáááºá
ááºážáááºááŸá¯áá»á¬áž ááŒá¯áá¯ááºáá±áá«áááºá ááááŠážá
áœá¬á á¡áá¯á¶ážááŒá¯áá°ááẠááœáá·áºááŒá¯áá»ááºááœáá·áºááŒá¯áá»ááºááᯠáá±á¬ááºážáá¶ááŒá®áž ááá¯áááºáá
áºáá¯ááᯠáááºáá¶áááŸáááẠ- ááœáá·áºááŒá¯áá»ááºáá¯ááºá ááá¯á·áá±á¬áẠááá®ážá¡ááœáẠáááºááŸááºáá²á·ááá¯á·áááºá á€ááá¯áááºááŸáá·áºá¡áá°á áááºáá±á¬ááºááœáá·áº ááá¯áááºáá
áºáᯠáá±á¬ááºážááá¯áá«áááºá á€ááœáá·áºááŒá¯áá»áẠscript á á¡ááá á¡ááŒááºá¡ááŸááºáá¯á¶á·ááŒááºááŸá¯á¡á¬ážáá¯á¶ážááẠá¡ááá®áá±ážááŸááºážááŸáá·áº ááœáá·áºááŒá¯áá»ááºáá¬áá¬ááŒá¬ážá០ááŒááºáááºáááºážááœáŸááºááŸá¯áá»á¬ážá¡áá±á«áº á¡ááŒá±áá¶áááºá á€áá±á¬ááºáá¶á·ááŒá±ážá¡ááŒá±á¬ááºáž ááá¯ááá¯áááºááŸá¯ááá¯ááºáá«áááºá
OAuth ááẠááœáá·áºááŒá¯áá»ááºááá°ááŒá®ážáá±á¬áẠáááŸááá±á¬ ááá¯áááºáá»á¬ážááᯠáá¬áá®áá¬ááŒá áºááá·áºááŒá®áž áá»ááºážáá»áŸá¡á¬ážááŒáá·áº ááŒá áºááá¯ááºáá»áŸáẠ10 áááá áºááá¯ááºáž ááŒá±á¬ááºážáá²ááá·áºáááºáá°áá±á¬ ááá±á¬ááá¬ážááᯠOAuth á ááá¯ááºáá¬áááºá ááá¬ážáááºááœáá·áºááŒá¯áá»ááºáá¯áẠáá±á¬ááºáá¶á·ááŒá±ážááẠ10 áááá áºááá¯ááºáž áááºážááŒá±á¬ááºážááœáŸá²ááŒááºážáá»á¬ážááŸáááá·áº áá¯á¶ážááá·áºá¡áááºááŒá¯ááŒááºážááŒá áºááŒá®ážá ááœáá·áºááœáá·áºáááºážáááºážááŒá±á¬ááá»áŸááºá ááá¯ááá¯á·áá±á¬ááŒá±ááŸááºážááá¯ááŸáá·áºáááºááŸá¬ áá»ááºá áá¡ááœáẠá¡áá¬áá¬áá¯á¶ážá¡áá¯ááºááá¯ááºáá«á á€ááŒá¿áá¬ááá¯ááŒá±ááŸááºážáááºá áá»áœááºá¯ááºááá¯á·ááá¯ááºáá¶ááááºáž áá»áœááºá¯ááºááá¯á·á¡áá¯á¶ážááŒá¯ááá·áº Refresh Token áá áºáá»áá¯ážááŸááá«áááºá á¡áá¬á¡á¬ážáá¯á¶ážá áá®ááŸá¬ ááá¯ááœááºáááºá á¡ááŒá¬ážáá±á¬ááºáá¶á·ááŒá±ážá០á áá á áºáá±á ááºá¡ááœááºážá áááºááááºáá±á¬ááºááœáá·áº ááá¯áááºá¡ááŒááºá áá±á¬ááºáááºáá áºáá¯ááᯠáá¯ááºáá±ážááẠ- Refresh Token ááẠáá áºááŒáááºáá¬á¡áá¯á¶ážááŒá¯ááá¯ááºááŒá®áž áááºážááááºáááºážááẠáá»á¬ážáá±á¬á¡á¬ážááŒáá·áº ááá¯ááŸááºáááºá ဠRefresh Token ááŒáá·áºá áááºááááºáá±á¬ááºááœáá·áºááá¯áááºá TTL (Live to Live) ááŒá®ážáá¯á¶ážáá±á¬á¡áá«á áááºáá±á¬ááºááœáá·áºááá¯áááºá¡áá áºáá áºáá¯áá±á¬ááºážááá¯ááŸá¯ááẠá¡ááŒá¬ážáá±á¬ááºáá¶á·ááŒá±ážáá¡áá¯á¶ážááŸááºááá¯á· áá±á¬ááºáá¬áááºááŒá áºáááºá á¡áá¯á¶ážááŒá¯áá¬ážáá±á¬ Refresh Token ááẠáá¯áááá¯á· áá»ááºáá»ááºážááŒááºáááºáááºááŸááºáááºá á€á á áºáá±ážááŸá¯ááẠá¡ááá·áºááŸá áºááá·áºááŒá áºááŒá®áž áá¯á¶ážá áœá²áá°ááᯠáááŒááºááá¯ááºáá² áá±á¬ááºáá¶ááœáẠáá¯ááºáá±á¬ááºááá¯ááºáááºá
3) á áááºááŒáá¯ááºáá±áᬠá¡ááœááºáá±á¬áºáááºáá»á¬ážááᯠáááºááŸááºáá«á
ááœá±ážáá»ááºáá¬ážáá±á¬ áá±á¬ááºáá¶á·ááŒá±ážáá»á¬ážááᯠá¡áá±á¬ááºá¡ááẠáá±á¬áºááŒá®ážáá±á¬ááºá ááœáá·áºááŒá¯áá»ááºááẠá¡áá¯ááºáá¯ááºáááºá á¡áá¯á¶ážááŒá¯áá°ááŸáá·áº áááºáááºááá·áº áá±áá¬ááᯠááá°ááẠááŸááºáá¬ážááá¯ááºáá«áááºá ODC ááœáẠááá·áºáááºááŸááááºáá±á¬ááºááœáá·áº ááá¯áááºááŸáá·áº áááºážááẠáá±ááºáá®áá±áá«á á¡áá¯á¶ážááŒá¯áá°áá±áá¬ááᯠáá±á¬ááºážááá¯ááá¯ááºááá·áº áá®ážááŒá¬ážá¡áá¯á¶ážá¡áá»ááºáá áºáᯠááŸááááºá á¡áááºá á¡áá¯á¶ážááŒá¯áá°ááá±áá¬ááẠáááŒá¬áááááŒá±á¬ááºážáá²áá² áááºááŸáá¡áá¬áá»á¬ážááᯠá¡ááŒáááºáá»á¬ážá áœá¬ ááá¯ááºáá¬ááẠááá¯á¡ááºáá«áá áááºááẠJWT ááá¯áááºáá»á¬ážáá²á·ááá¯á· ááŒá±ááŸááºážáá»ááºááá¯á· áá±á¬ááºááŸááá¬ááá¯ááºáááºá á€ááá¯áááºáá»á¬ážááᯠá á¶ááŸá¯ááºážááŒáá·áºáááºáž áá±á¬ááºáá¶áá«áááºá JWT ááá¯áááºááá¯ááºááá¯ááºááœáẠá¡ááá¯ááºážáá¯á¶ážááá¯ááºážáá«áááºáááº- áá±á«ááºážá á®áž (ááá¯áááºá¡áá»ááºá¡áááº)á payload (ááá¯á¡ááºáá±á¬áá±áá¬) ááŸáá·áº áááºááŸáẠ(áááºááŸááºá ááá¯áááºááᯠáá¬áá¬á០áááºááŸááºáá±ážááá¯ážáá¬ážááŒá®áž áá±á¬ááºááá¯ááºážááœáẠáááºážá áááºááŸááºá¡áááºážá¡ááŒá áºááᯠáááºá á áºáá±ážááá¯ááºáááº)á
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 ááá¯á· ááœáŸá²ááŒá±á¬ááºážááá¯ááºááŒá®áž á¡áá¯á¶ážááŒá¯áá°áá±áá¬ááᯠáá±á¬ááºážááá¯ááẠá¡ááŒáááºááá¯ááºáž ááœáá·áºááŒá¯áá»ááºáá¬áá¬ááᯠááááºááœááºáá«á á€áá»ááºážáááºááŸá¯áá¡á¬ážáááºážáá»ááºááŸá¬ áá¬áá¬ááŸá¡áá¯á¶ážááŒá¯áá°áá±áá¬ááŒá±á¬ááºážáá²ááŸá¯ááẠáá»ááºáá»ááºážááá¬áá² áááºáá±á¬ááºááœáá·áºááá¯áááºá¡áá áºáá áºáá¯ááŸáá·áºá¡áá°ááŒá áºáááºá
á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááááºáá»á¬áž
ááá¯á·ááŒá±á¬áá·áºá áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯áẠODC áá¬áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒá®áž á¡ááá®áá±ážááŸááºážáááºááœáẠáááºážááŸáá·áºáá»áááºáááºááŸá¯áá»á¬ážááᯠáá»áááºááŸáááŒá®ážáá±á¬ááºá áá¯á¶ážá
áœá²áá°áá»á¬ážááŸáá·áºáááºáááºáá±á¬ á¡áá»ááºá¡áááºááœáŸá²ááŒá±á¬ááºážááŒááºážááŒá¿áá¬ááᯠááŒá±ááŸááºážáá²á·áááºá
ODC ááẠááœáá·áºáááºážáá±á¬ á
á¶ááŸá¯ááºážáá
áºáá¯ááŒá
áºáá±á¬ááŒá±á¬áá·áº áá»áœááºá¯ááºááá¯á·ááœáẠááŸáááŒá®ážáá¬ážáááºáá±á¬ááºááŸá¯áá±ážáá° ááá¯á·ááá¯áẠáá¬áá¬á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠááœá±ážáá»ááºááẠááœá±ážáá»ááºááœáá·áºááŸááááºá Configure áá¯ááºááẠá¡ááœááºá¡áááºááŒá±ááá·áº Keycloak ááá¯áá»áœááºá¯ááºááá¯á·ááŒáá¯ážá
á¬ážáá²á·ááŒá®ážá á¡ááá®áá±ážááŸááºážáááºááŸáá»áááºáááºááŸá¯áá¯á¶á
á¶áá»á¬ážááá¯ááá·áºááœááºážááŒá®ážááŒá±á¬ááºážáá²ááŒá®ážáá±á¬ááºá áááºážááẠá¡áááºááá·áºááŒá
áºáá«ááŒá®á á¡ááá®áá±ážááŸááºážáááºááœááºá áá»ááºááŸááá±áá±ážáááºááŸá¬ áá»áááºáááºááŸá¯áá¯á¶á
á¶áá»á¬ážááᯠááŒá±á¬ááºážáá²áááºááŒá
áºáááºá
ááŸáááŒá®ážáá¬áž ááŒá±ááŸááºážáááºážááœá±á¡ááŒá±á¬ááºáž ááŒá±á¬áá±áá¬
áá»áœááºá¯ááºááá¯á·áá¡ááœá²á·á¡á ááºážá¡ááœááºážá ááááá¯á¶áž ODC áá¬áá¬á¡áá±ááŒáá·áº ááá¯á¡ááºáááá¯ááŒáá·áºá áœááºáá¬ážááá·áº áá»áœááºá¯ááºááá¯á·áááá¯ááºááá¯ááºá¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠá á¯á ááºážáá¬ážáá«áááºá á¡ááŒá¬ážáá±á¬ á¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ááŒá±ááŸááºážáááºážáá»á¬ážááᯠá¡áá±ážá áááºááŒááºáááºáá¯á¶ážáááºááŒá®ážáá±á¬ááºá á€á¡áá»ááºááẠá¡ááá¯ááºá á¬ážá¡áá»ááºááŒá áºáááºáᯠáá»áœááºá¯ááºááá¯á·ááŒá±á¬ááá¯ááºáá«áááºá áááºážááá¯á·áááá¯ááºááá¯ááºáá¬áá¬ááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááẠáá¯á¶ážááŒááºáá»ááºááᯠáá±á¬ááºáá¶ááá·áºá¡áá±ááŒáá·áº ááá¯á¡ááºáá±á¬áá¯ááºáá±á¬ááºááá¯ááºá áœááºážáááŸáááŒááºážá¡ááŒáẠá¡áá»áá¯á·áá±á¬áááºáá±á¬ááºááŸá¯áá»á¬ážá¡ááœáẠá áááºááŒáá¯ááºááœáá·áºááŒá¯áá»ááºáá»á¬ážá áœá¬ááŸáááá·áº á áá áºáá±á¬ááºážáá áºáá¯ááŸááá±ááŒááºážá¡ááœáẠáá¶á·ááá¯ážáá±ážáá°áá»á¬ážáááºá០á áá¯ážááááºááŸá¯áá»á¬ážááŸááá²á·áááºá áááºáááºážáá»á¬ážá á¡áá»ááºá¡áááºáá»á¬ážááᯠááááºážáááºážáá¬ážááŒá®ážááŒá áºáááºá ááá¯á·áá±á¬áºáááºáž á¡áááºááá·áºááŒá áºáá¬ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááœáẠáá±á«ááºážá ááºážáááºá¡ááœáẠá¡áááºááŒá±ááŸá¯áá»á¬ážááŸááá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá Keycloak ááœáẠáááºážáááá¯ááºááá¯ááºá¡áá¯á¶ážááŒá¯áá°á á®áá¶ááá·áºááœá²ááŸá¯á áá áºááŸáááŒá®áž áá±áá¬ááᯠáááºážááœáẠááá¯ááºááá¯ááºááááºážáááºážáá¬ážááŒá®áž áááºážááẠááá·áºá¡áá¯á¶ážááŒá¯áá°áá»á¬ážááᯠááá¯áá±áá¬ááœáẠáá»á±á¬áºáááºááẠáááºáá²áááºááá¯ááºáá«á áá«ááá¯áá¯ááºááá¯á·á Keycloak ááŸá¬ ááá¯á¡ááºáá²á· ááœáŸá²ááŒá±á¬ááºážáá¯ááºáá±á¬ááºáá»ááºá¡á¬ážáá¯á¶ážááᯠá¡ááŒáá·áºá¡ááá¯ááºáá±á¬ááºááá¯ááºá á±ááá·áº API áá áºáá¯ááŸááá«áááºá
áá»áœááºá¯ááºáá¡ááŒááºá¡áá á¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážá áá±á¬ááºáááºá¥ááá¬áá áºáá¯ááŸá¬ Ory Hydra ááŒá áºáááºá ááœá²ááŒá¬ážááŒá¬ážáá¬ážáá±á¬á¡á áááºá¡ááá¯ááºážáá»á¬ážáá« á ááºáá±á¬ááŒá±á¬áá·áºá áááºáááºá á¬ážá áá¬áá±á¬ááºážáááºá áá±á«ááºážá ááºážáááºá áááºáá¡áá¯á¶ážááŒá¯áá°á á®áá¶ááá·áºááœá²ááŸá¯áááºáá±á¬ááºááŸá¯ááᯠáááºážááá¯á·áááœáá·áºááŒá¯áá»ááºáá±ážááá·áºáááºáá±á¬ááºááŸá¯ááŸáá·áº áá»áááºáááºááŒá®áž ááá¯á¡ááºáááᯠááá¯ážáá»á²á·ááẠááá¯á¡ááºáááºááŒá áºáááºá
Keycloak ááŸáá·áº Ory Hydra ááẠáá áºáá¯áááºážáá±á¬ á ááºááŒááºáááŒá±ááŸááºážáááºážáá»á¬ážááá¯ááºáá«á OpenID áá±á¬ááºáá±ážááŸááºážá០á¡ááá¡ááŸááºááŒá¯áá¬ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠááœá±ážáá»ááºááŒááºážááẠá¡áá±á¬ááºážáá¯á¶ážááŒá áºáááºá á€ááŒá±ááŸááºážáá»ááºáá»á¬ážááœáẠá¡áá»á¬ážá¡á¬ážááŒáá·áº OpenID á¡ááá¡ááŸááºááŒá¯ áá¶ááááºáá«ááŸááááºá
áááºá ODC áá¬áá¬ááᯠáááááºážáá¬ážááá¯áá«á ááŸáááŒá®ážáá¬áž á¡ááá±ážáááºáá±á¬ááºááŸá¯áá±ážáá°áá»á¬ážá¡ááŒá±á¬ááºážááá¯áááºáž ááá±á·áá«ááŸáá·áºá ááá±á·áá±ááºááœáẠááœá±ážáá»ááºá áá¬áá±á¬ááºážáá»á¬ážá áœá¬ááŸááááºá
áá±á¬ááºáá áºáá¯ááá¬áá²
ááá±ážáá±á¬á·áá±á¬á¡áá¬áááºááœááºá áá»áœááºá¯ááºááá¯á·ááẠá¡ááŒá¬ážáááºážáááºážááŒáá·áº á¡ááœááºážááá¯ááºážáááºáá±á¬ááºááŸá¯áá»á¬ážááá¯á· á¡ááœá¬ážá¡áá¬áá»á¬ážááᯠááááºááœá¬ážáá«áááºá OpenResty ááᯠá¡áá¯á¶ážááŒá¯á áá»áœááºá¯ááºááá¯á·ááááºááŸá SSO ááᯠáá»áááºááœááºáá»áŸá¬ááœáẠOAuth áá±á«áºá¡ááŒá±áá¶á ááá±á¬ááºá
á®áá
áºáá¯ááá¯á· ááœáŸá²ááŒá±á¬ááºážááẠá
á®á
ááºáá«áááºá á€áá±áá¬ááœáẠá¡áááºááá·áºáá¯ááºáá¬ážáá±á¬ ááŒá±ááŸááºážáááºážáá»á¬ážá
áœá¬ ááŸáááŒá®ážá á¥ááá¬á
á¡ááá¯áá±á¬ááºážáá á¹á ááºážáá»á¬áž
source: www.habr.com