рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдЧреЛрдкрдиреАрдпрддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реБрдП, рдХрдВрдкреНрдпреВрдЯрд░ рдХреЛ рдЖрдкрдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдХреИрд╕реЗ рджреЗрдВ?
- рд╕реВрдЦреА рдорд╛рд░реНрдЯрд┐рдиреАред рдПрдХ рдмрдбрд╝реЗ рдЧрд┐рд▓рд╛рд╕ рдореЗрдВред
- рдФрдИ, рдорд╣рд╛рд╢рдпред [рд╣рд╛рдВ, рдорд╣рд╛рд╢рдп (Fr.)]
"рдмрд╕ рдПрдХ рд╕реЗрдХрдВрдб, рд╕рднреА рдирд╣реАрдВред" рдЧреЙрд░реНрдбрди рдХреА рддреАрди рдЙрдВрдЧрд▓рд┐рдпрд╛рдВ, рд╡реЛрдбрдХрд╛ рдХреА рдПрдХ, рдХрд┐рдирд╛ рд▓рд┐рдХреНрд▓реЗрдЯ рдХреА рдЖрдзреА рдЙрдВрдЧрд▓реАред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдмрд░рддрди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдорд╛рд░реЛ, рдФрд░ рдлрд┐рд░ рдиреАрдВрдмреВ рдХрд╛ рдПрдХ рдмрдбрд╝рд╛ рдЯреБрдХрдбрд╝рд╛ рдбрд╛рд▓ рджрд┐рдпрд╛ред рдХреНрдпрд╛ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ?
рдЬрд╛рди рдлреНрд▓реЗрдорд┐рдВрдЧ, рдХреИрд╕реАрдиреЛ рд░реЛрдпрд╛рд▓реЗ, 1953
рднрд╛рдЧ 1. OAuth 2.0 рдФрд░ OpenID рдХрдиреЗрдХреНрдЯ рдХрд╣рд╛рдирд┐рдпрд╛рдВ
рдпреВрдирд┐рд╡рд░реНрд╕рд▓ рдФрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЖрдЬ 21 рд╡реАрдВ рд╕рджреА рдореЗрдВ, рдЦреБрд▓реЗ рдкрд╣реБрдВрдЪ рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдФрд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕рднреА рдХреЗ рдкрд╕рдВрджреАрджрд╛ рд╕рдореВрд╣ рдХреЛ OAuth + OIDC рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрдм рддрдХ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЖрдпрд╛ рд╣реИред рд╡реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╡рд┐рдХреНрд░реЗрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ HTTP (рдПрд╕) рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЬреЗрдбрдмреНрд▓реНрдпреВрдЯреА (
рдЬреЗрдПрд╕рдПрди рд╡реЗрдм рдЯреЛрдХрди ) рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдУрдкрдирдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдпрд╛, рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, OIDC OAuth рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд░рдг рд╣реИред
OpenID - рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдорд╛рдирдХ рдФрд░ рдбрд┐рдЬрд┐рдЯрд▓ рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕ рд╕рд╛рд▓, рд╡рд╣ 14 рд╕рд╛рд▓ рдХрд╛ рд╣реЛ рдЧрдпрд╛ред рд╡рд░реНрддрдорд╛рди рддреАрд╕рд░реЗ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдкреВрд░рд╛ рдирд╛рдо OpenID рдХрдиреЗрдХреНрдЯ рдпрд╛ OIDC рд╕реЗ рдЫреЛрдЯрд╛ рд╣реИред рдпрд╣ рд╡реЗрдм рдФрд░ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕, рдФрд░ рдХреЙрд░реНрдкреЛрд░реЗрдЯ рд╕рд┐рд╕реНрдЯрдо рджреЛрдиреЛрдВ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИред
рдЙрдирдХрд╛ рд╕рд╛рдереА, OAuth рдУрдкрди рдПрдХреНрд╕реЗрд╕ рдбреЗрд▓рд┐рдЧреЗрд╢рди рд╕реНрдЯреИрдВрдбрд░реНрдб 12 рд╕рд╛рд▓ рдХрд╛ рд╣реИред рдФрд░ рдЗрд╕реА RFC 5849 рдорд╛рдирдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рдХреЗ 9 рд╕рд╛рд▓ рдмрд╛рджред рд╣рдо OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдЖрдзреБрдирд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд░реНрддрдорд╛рди
RFC 6749 рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВрдЧреЗред рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ OAuth 2.0 рдЕрдкрдиреЗ рдкреВрд░реНрд╡рд╡рд░реНрддреА OAuth 1.0 рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдирд╣реАрдВ рд╣реИред
OAuth рдкрд╣реБрдБрдЪ рдХреЛ рдкреНрд░рддреНрдпрд╛рдпреЛрдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдпреЛрдЬрдирд╛, рдкрд░рд┐рд╡рд╣рди) рд╣реИ, рдЬреЛ RFC 6749 рдХреЗ рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ рдЗрд╕реЗ (рддреАрд╕рд░реЗ рдкрдХреНрд╖) рдХреЛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рд╕реАрдорд┐рдд рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
oauth.net , рд╣рд╛рд░реВрди рдкрд╛рд░реЗрдХреА рджреНрд╡рд╛рд░рд╛ рд╣реЛрд╕реНрдЯ рдХреА рдЧрдИ рдкреНрд░рдореБрдЦ OAuth рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реИ
oauth.com - OAuth рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рдФрд░ рдЯреЗрд╕реНрдЯ рдкрд░реНрдпрд╛рд╡рд░рдг
рдУрдкрди рдЖрдИрдбреА рдХрдиреЗрдХреНрдЯ (OIDC) рд╡рд┐рдХреЗрдиреНрджреНрд░реАрдХреГрдд рдкрд╣рдЪрд╛рди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЦреБрд▓рд╛ рдорд╛рдирдХ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдЕрд╕рдВрдмрдВрдзрд┐рдд рдЗрдВрдЯрд░рдиреЗрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд╕реБрд░рдХреНрд╖рд┐рдд рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП OAuth рд╕рдВрджреЗрд╢реЛрдВ рдФрд░ рдПрдХ JWT рдХрдВрдЯреЗрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, OAuth рдПрдХ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдкрд░рд┐рд╕реАрдорди рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕рд░реНрд╡рд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдореЛрдВ (рдпреЛрдЬрдирд╛) рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред
рдФрд░, рдзреНрдпрд╛рди,
OAuth рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ рд╣реИ ! рди рддреЛ рд╡рд╣ рдХреМрди рд╣реИ, рди рд╣реА рд╡рд╣ рдЕрдм рдХрд╣рд╛рдВ рд╣реИ, рдФрд░ рди рд╣реА рд╡рд╣ рдЕрднреА рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рд░реА рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд╣рд╕реНрддрдХреНрд╖реЗрдк рдХреЗ рдмрд┐рдирд╛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд┐рдВрджреБ рд╣реИред
рдпрд╣ рдХрд╛рдо рдЖ рд╕рдХрддрд╛ рд╣реИ:
OAuth + OIDC + UMA рдХрд╛ рд╕рдВрдпреБрдХреНрдд рдЙрдкрдпреЛрдЧ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣рдЪрд╛рди рдФрд░ рдЕрднрд┐рдЧрдо рдирд┐рдпрдВрддреНрд░рдг (рдкрд╣рдЪрд╛рди рдФрд░ рдкрд╣реБрдВрдЪ рдкреНрд░рдмрдВрдзрди - IdM, IAM) рдХреА рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
- рджрд╡рд╛ рдореЗрдВ рд░реЛрдЧреА рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреА HEART (рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕рдВрдмрдВрдз рдЯреНрд░рд╕реНрдЯ) рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- CIAM рдкрд░ (рдХрдВрдЬреНрдпреВрдорд░ рдЖрдЗрдбреЗрдВрдЯрд┐рдЯреА рдПрдВрдб рдПрдХреНрд╕реЗрд╕ рдореИрдиреЗрдЬрдореЗрдВрдЯ) рдХрд╕реНрдЯрдорд░ рдЖрдЗрдбреЗрдВрдЯрд┐рдлрд┐рдХреЗрд╢рди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдлреЙрд░ рдореИрдиреНрдпреБрдлреИрдХреНрдЪрд░рд┐рдВрдЧ рдПрдВрдб рдЯреНрд░реЗрдбрд┐рдВрдЧ рдХрдВрдкрдирд┐рдпреЛрдВ
- IoT (рдЗрдВрдЯрд░рдиреЗрдЯ рдСрдл рдерд┐рдВрдЧреНрд╕) рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реНрдорд╛рд░реНрдЯ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдбрд┐рдЬрд┐рдЯрд▓ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдирд┐рдЬреАрдХрд░рдг
рдПрдкреАрдЖрдИ рдЕрд░реНрдерд╡реНрдпрд╡рд╕реНрдерд╛ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕реЗрд╕ рдХрдВрдЯреНрд░реЛрд▓ рдХрд╛ рдПрдХ рдирдпрд╛ рд╡реЗрдирд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рдд, рдмрд╛рдХреА рд╕рд┐рд╕реНрдЯрдо рдХреА рддрд░рд╣ рдПрдХ рд╣реА рд╕реНрдерд╛рди рдкрд░ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЛ рд╕реНрдЯреЛрд░ рди рдХрд░реЗрдВред рд╢рд╛рд░реАрд░рд┐рдХ рд░реВрдк рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рдЕрд▓рдЧ рдХрд░реЗрдВред рдФрд░ рдЗрд╕рд╕реЗ рднреА рдмреЗрд╣рддрд░ - рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рд╕рднреА рдкрд╣рдЪрд╛рди рджреЗрдВ рдФрд░ рдЗрд╕реЗ рдХрднреА рднреА рдЕрдкрдиреЗ рд╕рд╛рде рди рд░рдЦреЗрдВред рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рдорд╛рд▓рд┐рдХ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░реЗрдВред
Apple рдиреЗ рдХрд╣рд╛ рдХрд┐ рд░реВрд╕ рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рд░реВрд╕ рдХреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдирд╛рдо, рдкрддрд╛, рдИрдореЗрд▓, рдлреЛрди рдирдВрдмрд░ рд╣реИред рд▓реЗрдХрд┐рди рд╕рдВрджреЗрд╢, рдлреЛрдЯреЛ, рдЖрджрд┐ рд▓реЛрдЧ рдЦреБрдж iCloud рдХреНрд▓рд╛рдЙрдб (рдЬреЛ рд░реВрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ) рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддреЗ рд╣реИрдВред
рднрд╛рдЧ 2. рд▓рдШреБ рдирд╛рдЯрдХ "рдЯреНрд░рд╕реНрдЯ рдПрдВрдб рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди"
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╣рдорд╛рд░реЗ рдкреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдирд┐рдЬреА рдбреЗрдЯрд╛ рдХреЛ рди рддреЛ рд╣рдорд╛рд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП il faut рдирд╣реАрдВ рдерд╛, рди рд╣реА рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдПрдХ рд╣реА рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВред рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдЯреНрд░рд╕реНрдЯреА рдЪреБрдирд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рдпрд╣ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрдм рдорд╣рд╛рдорд╣рд┐рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред
рдЕрднрд┐рдиреЗрддрд╛:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
- рдЧреНрд░рд╛рд╣рдХ рдЖрд╡реЗрджрди
- рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛
- рд╕рдВрд╕рд╛рдзрди рд╕рд░реНрд╡рд░
рдХрд╛рд░реНрд░рд╡рд╛рдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╣реЛрддреА рд╣реИред рд╕рднреА рдкрд╛рддреНрд░ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдкрд░ рдПрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЦрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдФрд░ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рд╡реИрдз рдЕрдиреБрдмрдВрдз рд╣реИред рд░рд┐рд╕реЛрд░реНрд╕ рд╕рд░реНрд╡рд░ рдХрд┐рд╕реА рднреА рдкреАрдбрд╝рд┐рдд рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рдореБрджреНрджреЗ рдореЗрдВ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдкрд░ рднрд░реЛрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╡рд╣ рдкрд╣рдЪрд╛рди рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ (P): (рд╡реЗрдм-рдЖрдзрд╛рд░рд┐рдд рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдХреЗ) рдкреНрд░рд┐рдп рдХреНрд▓рд╛рдЗрдВрдЯ-рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдореБрдЭреЗ "рдЗрд╕ рд╕рдВрд╕рд╛рдзрди" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди (K): рдкреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╣рд▓реЗ "рдЗрд╕ рд╕рдВрд╕рд╛рдзрди" рдХреА рдХреБрдВрдЬреА рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВред рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдмрд┐рдирд╛, "рдпрд╣ рд╕рдВрд╕рд╛рдзрди" рддрдХ рдкрд╣реБрдВрдЪ рдмрдВрдж рд╣реИред
P: рдореИрдВ рдРрд╕реА рдХреЛрдИ рдЪрд╛рдмреА рдирд╣реАрдВ рд╣реИред
K: рдлрд┐рд░ рдореИрдВ рдЖрдкрдХреЛ рдЕрд╕реНрдерд╛рдпреА рд░реВрдк рд╕реЗ рдПрдХ рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдореЗрдВ рдмрджрд▓ рджреВрдВрдЧрд╛ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрд╕рд╛рдзрди рд╕рд░реНрд╡рд░ рдХреА рдХреБрдВрдЬреА рдЬрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдордЭреМрддрд╛ рд╣реИред (рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкреАред рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ)
рдкрд╣рдЪрд╛рди рд╕реЗрд╡рд╛ (I): рдкреНрд░рд┐рдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдЖрдк рдХреМрди рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдХрд┐рди рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
P: I, Ytsuken рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛, рдкрд╛рд╕рд╡рд░реНрдб рдРрд╕рд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрд░рд╣, рдореИрдВ "рдЗрд╕ рд╕рдВрд╕рд╛рдзрди" рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдФрд░: рдзрдиреНрдпрд╡рд╛рдж, рдХреЙрдорд░реЗрдб рдЬрдЯрд╕реБрдХреЗрдиред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рд░рд╣рд╛ рдФрд░ рдЖрдкрдХреА рдкрд╣рдЪрд╛рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХреА рдЧрдИред рдпрд╣рд╛рдБ "рдЗрд╕ рд╕рдВрд╕рд╛рдзрди" рдХреА рдХреБрдВрдЬреА рд╣реИ (P. K. рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ)
рдкреА: рдЧреНрд░рд╛рд╣рдХ, рдореИрдВ рдЖрдкрдХреЛ "рд╕рдВрд╕рд╛рдзрди" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдпрд╛ред
K: рдзрдиреНрдпрд╡рд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ред рдХреБрдВрдЬреА рд╕рд╣реА рд╣реИред рдпрд╣рд╛рдВ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ "рд╕рдВрд╕рд╛рдзрди" рд╣реИред
рдкрд░реНрджрд╛ред рдлрд┐рд▓реНрдо "рд╕реНрдкреЗрд╕ рдУрдбрд┐рд╕реА рдСрдлрд╝ 2001" рд╕реЗ
рд░рд┐рдЪрд░реНрдб рд╕реНрдЯреНрд░реЙрд╕ рдХреА рд╢реБрд░реБрдЖрддреА рд╕рд┐рдореНрдлрдиреА рдЪрд▓рддреА рд╣реИрднрд╛рдЧ 3. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрд╡рд╛
рдЕрдм рдЪрд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░реЛред рд╣рдорд╛рд░реЗ рдПрдЬреЗрдВрдбреЗ рдореЗрдВ рддреАрди рдХрд╛рд░реНрдп рд╣реИрдВ: рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдирд┐рдпреБрдХреНрдд рдХрд░рдирд╛, рдордВрдЪ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рдФрд░ рдирд╛рдЯрдХ рдЦреЗрд▓рдирд╛ред рдФрд░ рд╕рдм рдХреБрдЫ рдПрдХ рдмрд╛рд░ рдореЗрдВ InterSystems IRIS рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдкрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рд╕реЗ рдПрдХ рдбрд┐рдЬрд╛рдЗрди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рд╕рдВрдпреЛрдЬрди рдореЗрдВ: OAuth Keycloak рд╕рд░реНрд╡рд░ + OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ IRIS рдкрд░ OAuth рд╕рдВрд╕рд╛рдзрдиред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ:
- рдЙрд╕ рдкрд░ рд╣рдорд╛рд░реЗ рдбреЗрдореЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рд╕рд╛рде OAuth рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдФрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред
- рдЗрд╕реЗ OAuth рд╕рд░реНрд╡рд░ рдФрд░ рд╡реЗрдм рд╕рдВрд╕рд╛рдзрдиреЛрдВ рд╕реЗ рдЬреЛрдбрд╝рдХрд░ рдПрдХ рдбреЗрдореЛ OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯ рдХрд░реЗрдВред
- рдЧреНрд░рд╛рд╣рдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВ рдЬреЛ OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк Java, Python, C #, NodeJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдСрдмреНрдЬреЗрдХреНрдЯрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рдореНрди рдирдореВрдирд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛрдб рд╣реИред
рдбреЗрд╡рд▓рдкрд░ рд╕рдореБрджрд╛рдп рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рд╕реАрдПрд╕рдкреА ( рднрд╛рдЧ 1 , рднрд╛рдЧ 2 , рднрд╛рдЧ 3 ) рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдореЗрдВ OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рддреАрди рднрд╛рдЧреЛрдВ рдореЗрдВ рдбреИрдирд┐рдпрд▓ рдХреБрдЯрд╛рдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдирд┐рд░реНрджреЗрд╢ рд╣реИред
OAuth рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдЪреЗрдХрд▓рд┐рд╕реНрдЯреНрд╕ рд▓рд┐рдЦреЗрдВ - рдпрд╣ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд╣реА рдЖрд╡реЗрджрди рд╣реИред рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдФрд░ рд░рд┐рдХреНрдд рд╕реНрдерд╛рдиред
рдирдореВрдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдХрд╣рд╛рдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рд╕рднреА рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рджреЛ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реИрдВ:
InterSystems Learning Services Labs рдЕрдиреБрднрд╛рдЧ рдореЗрдВ InterSystems Learning Services Training platform рдкрд░ рддреИрдпрд╛рд░-рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреНрд▓рд╛рдЙрдб IRIS рд╕рд░реНрд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбреЙрдХрдЯрд░ рдХрдВрдЯреЗрдирд░ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рд▓реЗрдЦ рдореЗрдВ рдФрд░ рдкрдврд╝реЗрдВ - рдбреЙрдХрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ IRIS рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрджрдо-рджрд░-рдЪрд░рдг рдирд┐рд░реНрджреЗрд╢ рдпрд╛, рдЬреЛ рдПрдХ рд╡реАрдбрд┐рдпреЛ рдХреЛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо IRIS рдХреЗ рд╕рд╛рде рдбреЙрдХреНрдпреБрдореЗрдВрдЯреНрд╕ рдФрд░ VSCode рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рдирд┐рд░реНрджреЗрд╢
1-1 OAuth рд╕рд░реНрд╡рд░ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рд╣рдо рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ рдореЗрдВ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ:
рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рди >> рд╕реБрд░рдХреНрд╖рд╛ >> OAuth 2.0 >> рд╕рд░реНрд╡рд░
рдЕрдЧрд▓рд╛, рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ, рд╕реЗрдЯрд┐рдВрдЧ рд▓рд╛рдЗрди рдХреЗ рд▓рд┐рдП рдПрдХ рдирд╛рдо рд╣реЛрдЧрд╛ рдФрд░, рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рддреЛ рдХреЛрд▓реЛрди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдпрд╛ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред
рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм:рд╡рд┐рд╡рд░рдг: рд╡реИрдХрд▓реНрдкрд┐рдХ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕рд▓рд┐рдП "рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░"
рдЬрдирд░реЗрдЯрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ (рдЗрд╕рдХреЗ рдмрд╛рдж CTG) рд╣реЛрд╕реНрдЯ рдирд╛рдо рд╣реИ: рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХрд╛ DNS рдирд╛рдо
рд╕рдорд░реНрдерд┐рдд рдЕрдиреБрдорддрд┐ рдкреНрд░рдХрд╛рд░ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ):
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓: рд╕рдВрд╕рд╛рдзрди, рд╕реНрд╡рд╛рдореА, рдкрд╛рд╕рд╡рд░реНрдб
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЦ
рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд▓рдПрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рдСрдЙрдереЗрд╕реНрд╡рд░
рдЕрдиреБрдорддрд┐рдпрд╛рдБ рдЯреИрдм:рд╕рдорд░реНрдерд┐рдд рд╡реЙрд▓реНрдпреВрдо рдЬреЛрдбрд╝реЗрдВ: рдЙрджрд╛ред рд╕реНрдХреЛрдк 1 рдФрд░ рд╕реНрдХреЛрдк 2
рдЕрдВрддрд░рд╛рд▓ рдЯреИрдм:рдПрдХреНрд╕реЗрд╕ рдХреБрдВрдЬреА рдЕрдВрддрд░рд╛рд▓: 3600
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдЕрдВрддрд░рд╛рд▓: 60
рдЕрджреНрдпрддрди рдХреБрдВрдЬреА рдЕрдВрддрд░рд╛рд▓: 86400
рд╕рддреНрд░ рдмрд╛рдзрд┐рдд рдЕрдВрддрд░рд╛рд▓: 86400
рдЧреНрд░рд╛рд╣рдХ рдХреБрдВрдЬреА рд╡реИрдзрддрд╛ рдЕрд╡рдзрд┐: 0
JWT рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм:рдЗрдирдкреБрдЯ рдПрд▓реНрдЧреЛрд░рд┐рдердо: RS512
рдореБрдЦреНрдп рдкреНрд░рдмрдВрдзрди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо: RSA-OAEP
рд╕рд╛рдордЧреНрд░реА рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдердо: A256CBC-HS512
рдЕрдиреБрд░реВрдкрдг рдЯреИрдм:рдХрдХреНрд╖рд╛ рдХреА рдкрд╣рдЪрд╛рди рдХрд░реЗрдВ:% OAuth2.Server.Authenticate
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд░реНрдЧ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:% OAuth2.Server.Validate
рд╕рддреНрд░ рд╕реЗрд╡рд╛ рд╡рд░реНрдЧ: OAuth2.Server.Session
рдореБрдЦреНрдп рд╡рд░реНрдЧ рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВ:% OAuth2.Server.JWT
рдЕрдиреБрдХреВрд▓рди рдирд╛рдорд╕реНрдерд╛рди:% SYS
рдЕрдиреБрдХреВрд▓рди рднреВрдорд┐рдХрд╛рдПрдБ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ):% DB_IRISSYS рдФрд░% рдкреНрд░рдмрдВрдзрдХ
рд╕рд╣реЗрдЬреЗрдВред
1-2 рдЧреНрд░рд╛рд╣рдХ рдХреЛ OAuth рд╕рд░реНрд╡рд░ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ

рдЧреНрд░рд╛рд╣рдХ рд╡рд┐рд╡рд░рдг рдмрдЯрди >> рдЧреНрд░рд╛рд╣рдХ рд╡рд┐рд╡рд░рдг рдмрдЯрди рдмрдирд╛рдПрдБ:
рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм:рдирд╛рдо: CLIENT
рд╡рд┐рд╡рд░рдг: рдордирдорд╛рдирд╛
рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░: рдЧреЛрдкрдиреАрдп
рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ URL: рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡рд╛рдкрд╕реА рдмрд┐рдВрджреБ рдкрддрд╛
рд╕рдорд░реНрдерд┐рдд рдЕрдиреБрдорддрд┐ рдкреНрд░рдХрд╛рд░
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб: рд╣рд╛рдБ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓: рд╕рдВрд╕рд╛рдзрди, рд╕реНрд╡рд╛рдореА, рдкрд╛рд╕рд╡рд░реНрдб
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЦ
JWT рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рд╕рдорд░реНрдерд┐рдд рдЙрддреНрддрд░ рдкреНрд░рдХрд╛рд░
рдХреЛрдб
id_token
id_token рдХреБрдВрдЬреА
рдЯреЛрдХрди
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдХрд╛рд░: рд╕рд░рд▓
рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдЯреИрдм: рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░рд╛ рд╣реБрдЖ
рдЧреНрд░рд╛рд╣рдХ рдЬрд╛рдирдХрд╛рд░реА рдЯреИрдм:URL рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ:
рд▓реЙрдЧрд┐рди рд╕реНрдХреНрд░реАрди
рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдирд╛рдо
рд▓реЛрдЧреЛ url
рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛрдо рдкреЗрдЬ URL
рдиреАрддрд┐ url
рд╕реЗрд╡рд╛ URL рдирд┐рдпрдо
2-1 OAuth рд╕рд░реНрд╡рд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рди >> рд╕реБрд░рдХреНрд╖рд╛ >> OAuth 2.0 >> рдХреНрд▓рд╛рдЗрдВрдЯ

рдПрдХ рд╕рд░реНрд╡рд░ рд╡рд┐рд╡рд░рдг рдмрдирд╛рдПрдБ:
рдЬрдирд░реЗрдЯрд░ рдПрдВрдбрдкреЙрдЗрдВрдЯ: рд╕рд╛рдорд╛рдиреНрдп рд╕рд░реНрд╡рд░ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рд▓реЗрдВ, рдКрдкрд░ рджреЗрдЦреЗрдВ
рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд▓рдПрд╕ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рдкреВрд░реНрд╡-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХреА рд╕реВрдЪреА рд╕реЗ рдЪрдпрди рдХрд░реЗрдВ
рд╢реЗрд╖ рдлрд╝реАрд▓реНрдб рдХреА рд╕рд╛рдордЧреНрд░реА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХреА рдЬрд╛рдПрдЧреА, рд▓реЗрдХрд┐рди рдЖрдк рдЙрдиреНрд╣реЗрдВ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: CTG + / рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ
рдореБрдЦреНрдп рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: CTG + / рдЯреЛрдХрди
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реВрдЪрдирд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: CTG + / userinfo
рдореБрдЦреНрдп рдЖрддреНрдо рдирд┐рджрд╛рди рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: CTG + / рдирд┐рд░рд╕рди
рдкреНрд░рдореБрдЦ рдирд┐рд░рд╕рди рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ: CTG + / рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг
JSON рд╡реЗрдм рдЯреЛрдХрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (JWT)
рдбрд╛рдпрдирд╛рдорд┐рдХ рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рд╕реНрд░реЛрдд: URL рд╕реЗ JWKS рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
URL: CTG + / jwks

рдЗрд╕ рд╕реВрдЪреА рд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (scopes_supported рдФрд░ рджрд╛рд╡реЗ_ рдЕрд╕рдорд░реНрдерд┐рдд) рдХрд┐ рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдФрд░ рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫрдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рдбреЗрдЯрд╛ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдХреЗрд╡рд▓ рд╕реНрдХреЛрдк 1 рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдорддрд┐ рдорд╛рдВрдЧреА рдЬрд╛рдПрдЧреАред
рд╕рд╣реЗрдЬреЗрдВред
рдпрджрд┐ рдПрд╕рдПрд╕рдПрд▓ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реИ, рддреЛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдкрд░ рдЬрд╛рдПрдВ:
рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди >> рд╕реБрд░рдХреНрд╖рд╛ >> рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд╕рдПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди
2-2 OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛
рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рд╢рд╛рд╕рди >> рд╕реБрд░рдХреНрд╖рд╛ >> OAuth 2.0 >> рдХреНрд▓рд╛рдЗрдВрдЯ >> рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди >> рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдмрдирд╛рдПрдБ
рд╕рд╛рдорд╛рдиреНрдп рдЯреИрдм:рдЖрд╡реЗрджрди рдХрд╛ рдирд╛рдо: рдбреЗрдореЛ рдХреНрд▓рд╛рдЗрдВрдЯ
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдирд╛рдо: рдбреЗрдореЛ рдХреНрд▓рд╛рдЗрдВрдЯ
рд╡рд┐рд╡рд░рдг: рд╡реИрдХрд▓реНрдкрд┐рдХ
рд╕рдХреНрд╖рдо: рд╣рд╛рдБ
рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░: рдЧреЛрдкрдиреАрдп
рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрд╕реАрдПрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди: рдСрдЙрдердХреНрд▓рд┐рдПрдВрдЯ
рдХреНрд▓рд╛рдЗрдВрдЯ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ URL: рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдХрд╛ DNS рдирд╛рдо
рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрдорддрд┐ рдкреНрд░рдХрд╛рд░
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб: рд╣рд╛рдБ
рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд
рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓: рд╕рдВрд╕рд╛рдзрди, рд╕реНрд╡рд╛рдореА, рдкрд╛рд╕рд╡рд░реНрдб
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЦ
JWT рдкреНрд░рд╛рдзрд┐рдХрд░рдг
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдХрд╛рд░: рд╕рд░рд▓
рдЧреНрд░рд╛рд╣рдХ рдЬрд╛рдирдХрд╛рд░реА рдЯреИрдм:рд▓реЙрдЧрд┐рди рд╕реНрдХреНрд░реАрди
рд▓реЛрдЧреЛ url
рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛрдо рдкреЗрдЬ URL
рдиреАрддрд┐ url
рд╕реЗрд╡рд╛ URL рдирд┐рдпрдо
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реЙрд▓реНрдпреВрдо: рд╣рдо рд╕рд░реНрд╡рд░ рдкрд░ рдкрд╣рд▓реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд▓реЛрдЧреЛрдВ рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдХреЛрдк 1
рд╕рдВрдкрд░реНрдХ рдИрдореЗрд▓ рдкрддреЗ (рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ)
рдЕрдзрд┐рдХрддрдо рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЖрдпреБ (рд╕реЗрдХрдВрдб рдореЗрдВ)
JWT рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдЯреИрдм:JSON рд╡реЗрдм рдЯреЛрдХрди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (JWT)
X509 рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕реЗ JWT рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдмрдирд╛рдирд╛
IDToken рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рд╣рд╕реНрддрд╛рдХреНрд╖рд░: RS256
рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди: A256CBC
рдХреБрдВрдЬреА: RSA-OAEP
Userinfo рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рдЯреЛрдХрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рддрдХ рдкрд╣реБрдВрдЪреЗрдВ
рдХреНрд╡реЗрд░реА рдПрд▓реНрдЧреЛрд░рд┐рджрдо
рдЧреНрд░рд╛рд╣рдХ рд╕рд╛рдЦ рдЯреИрдм:рдЖрдИрдбреАред рдХреНрд▓рд╛рдЗрдВрдЯ: рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдкрд░ рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдПрдХ рд╕реЗ (рдКрдкрд░ рджреЗрдЦреЗрдВ)
рдЧреНрд░рд╛рд╣рдХ рдЖрдИрдбреА рдЬрд╛рд░реА рдХреА
рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд░рд╣рд╕реНрдп: рд╕рд░реНрд╡рд░ рдкрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рдЬрд╛рд░реА рдХрд┐рдП рдЧрдП рдПрдХ рд╕реЗ (рдКрдкрд░ рджреЗрдЦреЗрдВ)
рдЧреНрд░рд╛рд╣рдХ рд░рд╣рд╕реНрдп рдХреА рд╕рдордп рд╕реАрдорд╛ рд╕рдорд╛рдкреНрдд рд╣реЛ рд░рд╣реА рд╣реИ
рдЧреНрд░рд╛рд╣рдХ рдкрдВрдЬреАрдХрд░рдг рдпреВ.рдЖрд░.рдЖрдИ.
рд╕рд╣реЗрдЬреЗрдВред
рднрд╛рдЧ 4. рд╕рдВрд╣рд┐рддрд╛
рдЖрдЗрдП OAuth рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ REST рдХреЗ рд╕рд╛рде рдПрдХ рдиреНрдпреВрдирддрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред
рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, OAuth рдЗрд╕ рддрдереНрдп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рд╕рд╣рднрд╛рдЧрд┐рддрд╛ (рд╕рд░реНрд╡рд░, рдХреНрд▓рд╛рдЗрдВрдЯ, рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмреНрд░рд╛рдЙрдЬрд╝рд░, рд╕рдВрд╕рд╛рдзрди рд╕рд░реНрд╡рд░) рдореЗрдВ рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдЪреИрдирд▓ рдХрд┐рд╕реА рддрд░рд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИрдВред рдЕрдзрд┐рдХрддрд░, рдпрд╣ рднреВрдорд┐рдХрд╛ рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд▓рдПрд╕ рджреНрд╡рд╛рд░рд╛ рдирд┐рднрд╛рдИ рдЬрд╛рддреА рд╣реИред рд▓реЗрдХрд┐рди OAuth рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЪреИрдирд▓реЛрдВ рдкрд░ рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдВрдЬреАрд▓реЛрдХ рд╕рд░реНрд╡рд░, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ рдЪрд▓рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд┐рдХрд╛рд╕ рдХреЗ рджреМрд░рд╛рди рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░рддрд╛ рд╣реИред OAuth рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдЪреИрдирд▓ рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рд╕рдЦреНрддреА рд╕реЗ рд╕рдХреНрд╖рдо рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП - рдпрд╣ рдХреАрдХреНрд▓реЙрдХ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рджрд░реНрдЬ рд╣реИред InterSystems рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ OAuth рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрдареЛрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд▓реЗрддреЗ рд╣реИрдВ - рдПрд╕рдПрд╕рдПрд▓ / рдЯреАрдПрд╕рдПрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдПрдХрдорд╛рддреНрд░ рд╕рд░рд▓реАрдХрд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд╡-рд╣рд╕реНрддрд╛рдХреНрд╖рд░рд┐рдд рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрдИрдЖрд░рдЖрдИрдПрд╕ (рд╕рд┐рд╕реНрдЯрдо рдПрдбрдорд┐рдирд┐рд╕реНрдЯреНрд░реЗрд╢рди >> рд╕реБрд░рдХреНрд╖рд╛ >> рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА) рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдкреАрдХреЗрдЖрдИ рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреЗ рд╕рд╛рде рдЬрд╛рдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рдФрд░ OAuth рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рд╕рдорд░реНрдерд┐рдд рд╡реЙрд▓реНрдпреВрдо рдФрд░ OAuth рдХреНрд▓рд╛рдЗрдВрдЯ (рдЧреБрдВрдЬрд╛рдЗрд╢ - рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЗрд╕реЗ рд░реВрд╕реА рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХреИрд╕реЗ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛рдП?)
Parameter OAUTH2APPNAME = "OAuthClient"; set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error)
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рддреИрдпрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рд╕реЗ рдЕрдиреБрдорддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдореЗрдВ OAuth рд╕рд░реНрд╡рд░ рдкрд░ рдФрд░ OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рди рдХреЗрд╡рд▓ рдЖрд╡реЗрджрди рдирд╛рдо рдФрд░ рдЕрдиреБрд░реЛрдзрд┐рдд рд╡реЙрд▓реНрдпреВрдо (рдЧреБрдВрдЬрд╛рдЗрд╢) рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдпрд╣ рднреА рдПрдХ рдмреИрдХ рд▓рд┐рдВрдХ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдмрд┐рдВрджреБ рдкрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/" set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc)
рд╣рдо рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд IRIS рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕реЗрд╡рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ OAuth IRIS рд╕рд░реНрд╡рд░ рдкрд░ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЖрдкрдХреЛ рдЦрд╛рддреЗ рдореЗрдВ рдЕрдиреНрдп рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред
рдкреНрд░рд╛рдкреНрдд рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрдЧрд╛ рдФрд░ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрд╕рд╕реЗ рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдЧрд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдкрдиреЗ OAuth2.Server.Session рдЧреНрд▓реЛрдмрд▓ рдореЗрдВ% SYP рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рднреА рдмрдЪрд╛рдПрдЧрд╛:


3. рдЕрдзрд┐рдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рдиред рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдкрд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдкрд╣реБрдВрдЪ рдЯреЛрдХрдиред рдЖрдЗрдП рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ:
set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( .#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc )
OAuth рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкреВрд░реНрдг рдХрд╛рд░реНрдп рдХреЛрдб: Class OAuthClient.REST Extends %CSP.REST { Parameter OAUTH2APPNAME = "OAuthClient"; Parameter OAUTH2CLIENTREDIRECTURI = "https://52773b-76230063.labs.learning.intersystems.com/oauthclient/"; // to keep sessionId Parameter UseSession As Integer = 1; XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ] { <Routes> <Route Method="GET" Url = "/" Call = "Do" /> </Routes> } ClassMethod Do() As %Status { // Check for accessToken set isAuthorized = ##class(%SYS.OAuth2.AccessToken).IsAuthorized( ..#OAUTH2APPNAME, .sessionId, "scope1", .accessToken, .idtoken, .responseProperties, .error) // to show accessToken if isAuthorized { set valid = ##class(%SYS.OAuth2.Validation).ValidateJWT( ..#OAUTH2APPNAME, accessToken, "scope1", .aud, .JWTJsonObject, .securityParameters, .sc ) &html< Hello!<br> > w "You access token = ", JWTJsonObject.%ToJSON() &html< </html> > quit $$$OK } // perform the process of user and client identification and get accessToken set url = ##class(%SYS.OAuth2.Authorization).GetAuthorizationCodeEndpoint( ..#OAUTH2APPNAME, "scope1", ..#OAUTH2CLIENTREDIRECTURI, .properties, .isAuthorized, .sc) if $$$ISERR(sc) { w "error handling here" quit $$$OK } // url magic correction: change slashes in the query parameter to its code set urlBase = $PIECE(url, "?") set urlQuery = $PIECE(url, "?", 2) set urlQuery = $REPLACE(urlQuery, "/", "%2F") set url = urlBase _ "?" _ urlQuery &html< <html> <h1> IRIS OAuth2</h1> <a href = "#(url)#"> <b>IRIS</b></a> </html> > quit $$$OK } }
рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ OAuth рд╕рд░реНрд╡рд░ рдФрд░ OAuth рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдбреАрдмрдЧрд┐рдВрдЧ рд╕рдВрджреЗрд╢ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред % SYS рдХреНрд╖реЗрддреНрд░ рдореЗрдВ ISCLOG рд╡реИрд╢реНрд╡рд┐рдХ рдХреЛ рд╕рдВрджреЗрд╢ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред рдЕрдкрдиреЗ рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЯрд╛рдЗрдк рдХрд░реЗрдВ (рдпрд╛
рд╡реЗрдм рдЯрд░реНрдорд┐рдирд▓ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ):
set ^%ISCLOG = 5 set ^%ISCLOG("Category", "OAuth2") = 5 set ^%ISCLOG("Category", "OAuth2Server") = 5
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП OAuth 2.0 рдФрд░ OpenID рдХрдиреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ IRIS рдкреНрд░рд▓реЗрдЦрди рджреЗрдЦреЗрдВред
рдирд┐рд╖реНрдХрд░реНрд╖:
- OAuth рд╢рд╛рд░реАрд░рд┐рдХ рдФрд░ рднреМрдЧреЛрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдФрд░ "рд╡рд░реНрдХрд┐рдВрдЧ" рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдорджрдж рдХрд░рддрд╛ рд╣реИред рдФрд░, рдЗрд╕рд▓рд┐рдП, рдкрд╣рдЪрд╛рди рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреЛ рдордЬрдмреВрдд рдХрд░реЗрдВ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рд╡рд┐рднрд┐рдиреНрди рджреЗрд╢реЛрдВ рдХреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдкрд░ рдХрд╛рдиреВрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред
- OAuth рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдбреЗрдЯрд╛ рдХреЛ рдиреНрдпреВрдирддрдо рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ "рдЪрдордХ" рд╕рдХрддрд╛ рд╣реИред рд╕рд╛рде рд╣реА рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ "рдирд┐рд░рд░реНрдердХ" рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рд▓реЗ рд░рд╣рд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреН, рдЙрдирдХреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
- InterSystems IRIS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп, рдЖрдкрдХреЗ рдкрд╛рд╕ OAuth рдФрд░ OIDC рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди рдФрд░ рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рдкреВрд░рд╛ рд╕реЗрдЯ рд╣реИред
рдЗрдВрдЯрд░рд╕рд┐рд╕реНрдЯрдо рдЖрдИрдЖрд░рдЖрдИрдПрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреМрди рд╕реЗ рдЙрджреНрдпреЛрдЧ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣реИрдВ?
рд╣реЗрд▓реНрдердХреЗрдпрд░ рдСрдЯреЛрдореЗрд╢рди рдХреЗ рд▓рд┐рдП, рд╡рд┐рддреНрддреАрдп рдХреНрд╖реЗрддреНрд░ рдореЗрдВ, рдИ-рд╕рд░рдХрд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рд▓реЙрдЬрд┐рд╕реНрдЯрд┐рдХреНрд╕, рд░рд┐рдЯреЗрд▓ рдФрд░ рдХрдИ рдЕрдиреНрдп рдЙрджреНрдпреЛрдЧреЛрдВ рдореЗрдВред
рдпрджрд┐ рдЖрдк рд╕реНрд╡рд╛рд╕реНрдереНрдп рд╕реЗрд╡рд╛ рд╕реНрд╡рдЪрд╛рд▓рди рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ FHIR рдорд╛рдирдХ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред InterSystems IRIS рд╕реНрд╡рд╛рд╕реНрдереНрдп рдХреЗ рд▓рд┐рдП (InterSystems IRIS рдордВрдЪ рдХрд╛ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕рдВрд╕реНрдХрд░рдг) рдПрдХреАрдХрд░рдг рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП FHIR рдорд╛рдирдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдКрдкрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рднреА OAuth рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реБрд▓рдн рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рд╣реИрдВрдбрд▓рд░ рд╡рд░реНрдЧреЛрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╕рд╛рде рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВред OAuth рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдкреНрд░рдмрдВрдзрди рдкреЛрд░реНрдЯрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред