
рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдореИрдВ рдирд┐рдХрд┐рддрд╛ рд╕реНрдЯреБрдкрд┐рди, рд╕реВрдЪрдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ, Mail.Ru рдореЗрд▓ рд╣реВрдБред рдЗрддрдирд╛ рд╕рдордп рдкрд╣рд▓реЗ рдирд╣реАрдВ, рдореИрдВрдиреЗ рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдкрд░ рднреЗрджреНрдпрддрд╛ рдЕрдиреБрд╕рдВрдзрд╛рди рдХрд┐рдпрд╛ред рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЕрдкрдиреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдорд╛рдирдХ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ_рдпреВрд░реА рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реБрд░рдХреНрд╖рд╛ рддрдВрддреНрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдкрд░ рд╣рдорд▓реЛрдВ, рд╕реБрд░рдХреНрд╖рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдФрд░ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬреНрдЮрд╛рди рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рд╕реБрд░рдХреНрд╖рд╛ рдШрдЯрдХ, рдЬрд┐рдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореИрдВ рдиреАрдЪреЗ рдЪрд░реНрдЪрд╛ рдХрд░реВрдВрдЧрд╛, Mail.Ru рдореЗрд▓ рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдирд╡реАрдирддрдо SDK рдореЗрдВ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред
OAuth 2.0 рдХреА рдкреНрд░рдХреГрддрд┐ рдФрд░ рдХрд╛рд░реНрдп
OAuth 2.0 рдПрдХ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬреЛ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрдирд╛ рдХреИрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред рдЗрд╕реА рд╕рдордп, OAuth 2.0 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдмрд╛рд╣рд░ рдПрдХ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ: "рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ ..." рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрдо рд╣реЛ рдЧрдИ рд╣реИред
OAuth 2.0 рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рдПрдХ рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХрд╛ рдорд╛рд▓рд┐рдХ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЕрдиреБрдорддрд┐ рдХреЗ рд╕рд╛рде, рдЗрд╕ рдбреЗрдЯрд╛ рддрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде рддреГрддреАрдп-рдкрдХреНрд╖ рд╕реЗрд╡рд╛рдПрдВ (рдХреНрд▓рд╛рдЗрдВрдЯ) рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред
OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж, рд╕рд╛рдорд╛рдиреНрдп рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдЗрд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рдирд╣реАрдВ рдерд╛ред рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рд╕реЗ рдЕрдЯреИрдХ рд╡реЗрдХреНрдЯрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрд╡рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдерд╛ред рдореЛрдмрд╛рдЗрд▓ рдРрдк рдФрд░ рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рджреМрд░ рдореЗрдВ, рдПрдХ рдмрдЯрди рдХреЗ рд╕рд╛рде рдРрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдирд╛ рдмрд╣реБрдд рд▓реБрднрд╛рд╡рдирд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ OAuth 2.0 рдХреЛ рдореЛрдмрд╛рдЗрд▓ рд░реЗрд▓ рдкрд░ рд░рдЦрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдиреЗ рдореЛрдмрд╛рдЗрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдФрд░ рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрд╛: рдПрдХ рдмрд╛рд░ рдФрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, OAuth 2.0 рдЖрдо рддреМрд░ рдкрд░ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмрд╛рд╣рд░ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ: рдореЛрдмрд╛рдЗрд▓ рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рджреЛрдиреЛрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рджреЗрдЦреА рдЬрд╛рддреА рд╣реИрдВред
рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдПред
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдмреИрдХрдПрдВрдб рдХреЗ рдмрд┐рдирд╛ рдПрдХ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреЗ рд▓рд┐рдП рджреЛ рдкреНрд░рдореБрдЦ рд╕реБрд░рдХреНрд╖рд╛ рдореБрджреНрджреЛрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝ рд░рд╣рд╛ рд╣реИ:
- рдЧреНрд░рд╛рд╣рдХ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рд╣реИред
- рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рддрдХ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдкрд┐рдд рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред
рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХ рд╣реИ
рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдХреА рдЬрдбрд╝ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╕рд░реНрд╡рд░-рдЯреВ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ OAuth 2.0 рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреВ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ OAuth 2.0 рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░реЗрдВред
рджреЛрдиреЛрдВ рд╣реА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд╛рде рдкрдВрдЬреАрдХреГрдд рд╣реЛрддрд╛ рд╣реИ рдФрд░
client_secret
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ,
client_secret
ред
client_id
рдорд╛рди рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд╣реИ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗрд╡рд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдХреЗ рд╡рд┐рдкрд░реАрдд
client_secret
, рдЬрд┐рд╕рдХрд╛ рдорд╛рди рдирд┐рдЬреА рд╣реИред рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛
RFC 7591 рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЖрд░реЗрдЦ рдореЗрдВ рд╕рд░реНрд╡рд░-рд╕реЗ-рд╕рд░реНрд╡рд░ рд╕рдВрдЪрд╛рд░ рдореЗрдВ OAuth 2.0 рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
Https://tools.ietf.org/html/rfc6749#section-1.2 рд╕реЗ рд▓реА рдЧрдИ рдЫрд╡рд┐OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ 3 рдореБрдЦреНрдп рдЪрд░рдг рд╣реИрдВ:
- [рдПрд╕реА рдХрджрдо] рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ (рдмрд╛рдж рдореЗрдВ рдмрд╕
code
)ред - [DE рдЪрд░рдг]
access_token
code
рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ code
ред access_token
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрди рддрдХ access_token
ред
рдЖрдЗрдП рд╣рдо рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдХреЛрдб рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:
- [рдЪрд░рдг рдП] рд╕реЗрд╡рд╛ рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
- [рдЪрд░рдг рдмреА] рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ (рддреАрд░ рдмреА рдЕрдк) рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдЕрдиреБрдорддрд┐ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ (рджрд╛рдИрдВ рдУрд░ рддреАрд░ B)ред
- [рдЪрд░рдг рд╕реА] рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ
code
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЬреЛ code
рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛ рдореЗрдВ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ
access_token
рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ
access_token
рджреЗрдВ:
- [рдЪрд░рдг рдбреА] рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд░реНрд╡рд░
access_token
рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ: code
, client_secret
рдФрд░ redirect_uri
ред - [рдЪрд░рдг E] рд╡реИрдз
code
рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, client_secret
рдФрд░ redirect_uri
, client_secret
рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
access_token
рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рд╕рд░реНрд╡рд░-рд╕реЗ-рд╕рд░реНрд╡рд░ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ,
client_secret
рдЪреЛрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
client_secret
рд╣рдорд▓рд╛рд╡рд░ рдХреЛ рд╕рд░реНрд╡рд░-рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдпрд╛ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд╕рд░реНрд╡рд░ рдХреЛ рд╣реИрдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ OAuth 2.0 рдпреЛрдЬрдирд╛ рдПрдХ рдмреИрдХреЗрдВрдб (рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреВ-рд╕рд░реНрд╡рд░ рдЗрдВрдЯрд░реИрдХреНрд╢рди) рдХреЗ рдмрд┐рдирд╛ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХреИрд╕реА рджрд┐рдЦрддреА рд╣реИред
рдЫрд╡рд┐ https://tools.ietf.org/html/rfc8252#section-4.1 рд╕реЗ рд▓реА рдЧрдИ рд╣реИрд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛ рдХреЛ 3 рдореБрдЦреНрдп рдЪрд░рдгреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- [рдЪрд┐рддреНрд░ рдореЗрдВ 1-4 рдЪрд░рдг]
code
рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред - [рдЪрд┐рддреНрд░ рдореЗрдВ 5-6 рдЪрд░рдг]
access_token
code
рд▓рд┐рдП рдПрдХреНрд╕рдЪреЗрдВрдЬ code
ред access_token
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдВрд╕рд╛рдзрди рддрдХ access_token
ред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдореЛрдмрд╛рдЗрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреА рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐
client_secret
рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЕрдВрджрд░
client_secret
рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреА рдУрд░ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рд╕реЗ
lient_secret
рдЧреБрдкреНрдд рд░рдЦрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
client_secret
рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
client_secret
рдХрд░рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рд░реНрд╡рд░ рд╕реЗ рдЯреНрд░реИрдлрд╝рд┐рдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдЗрдВрдЬреАрдирд┐рдпрд░ рдХрд░рдирд╛ред рджреЛрдиреЛрдВ рддрд░реАрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП
client_secret
рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдмреЗрдХрд╛рд░ рд╣реИред
рдХреНрд▓рд╛рдЗрдВрдЯ-рдЯреВ-рд╕рд░реНрд╡рд░ рд╕реНрдХреАрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдкреНрд░рд╢реНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: "рддреБрд░рдВрдд
access_token
рдХреНрдпреЛрдВ рдирд╣реАрдВ?"ред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ, рд╣рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрджрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ
access_token
рдЧреНрд░рд╛рдВрдЯ рд╕реНрдХреАрдо рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рддреБрд░рдВрдд рдПрдХ
access_token
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╣рдо рдиреАрдЪреЗ рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐
рдЗрдВрдкреНрд▓рд┐рдореЗрдВрдЯ рдЧреНрд░рд╛рдВрдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИред
рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдЖрдИ рдпреЛрдЬрдирд╛ рдФрд░
рдРрдкрд▓рд┐рдВрдХ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд╢реБрджреНрдз рд░реВрдк рдореЗрдВ рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рддрдВрддреНрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдирд╣реАрдВ рд╣реИред
рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдЖрдИ рдпреЛрдЬрдирд╛ (рдпрд╛ рдЧрд╣рд░реА рд▓рд┐рдВрдХ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдбреЗрд╡рд▓рдкрд░ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЖрд╡реЗрджрди рдпреЛрдЬрдирд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпреЛрдЬрдирд╛ рдордирдорд╛рдиреА рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рд╣реА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рд╣реА рдпреЛрдЬрдирд╛ рд╡рд╛рд▓реЗ рдХрдИ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдм рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреНрд░рддреНрдпреЗрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ рддреЛ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рджреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдиреЗ рдПрдХ рд╣реА рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдПрдХ рд╣реА рд╕рд░реНрдХрд┐рдЯ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛? рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдЖрдИ рд╕реНрдХреАрдо рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рддреЗ рд╕рдордп рдЦреЛрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛрдиреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ? рдПрдВрдбреНрд░реЙрдЗрдб рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкрд╕рдВрдж рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдВрдбреЛ рджрд┐рдЦрд╛рдПрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдПрдХ рд▓рд┐рдВрдХ рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред IOS рдореЗрдВ,
рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ , рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХреЛ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░
рдХреЛрдб рдпрд╛ access_token рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИ ред
AppLink, рдХрд╕реНрдЯрдо URI рд╕реНрдХреАрдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕рд╣реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдВрддреНрд░ рдХреЗ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВ:
- рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрди рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
- рдПрдВрдбреНрд░реЙрдЗрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдРрдкрд▓рд┐рдВрдХ рдХреЛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдПрдВрдбреНрд░реЙрдЗрдб 6.0 рд╕реЗ рдиреАрдЪреЗ рдФрд░ iOS 9.0 рд╕реЗ рдиреАрдЪреЗ рдРрдкреНрдкрд▓рд┐рдВрдХ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдРрдкрд▓рд┐рдВрдХ рдХреЗ рдЙрдкрд░реЛрдХреНрдд рдиреБрдХрд╕рд╛рди, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рдВрднрд╛рд╡рд┐рдд рдЧреНрд░рд╛рд╣рдХ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╡реЗрд╢ рд╕реАрдорд╛ рдХреЛ рдмрдврд╝рд╛рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реА рдмрд╛рдд, рдЗрд╕ рддрдереНрдп рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИ рдХрд┐ рдХреБрдЫ рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ OAuth 2.0 рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред рдпрд╣ OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП AppLink рдХреЛ рдЕрдиреБрдкрдпреБрдХреНрдд рдмрдирд╛рддрд╛ рд╣реИред
рдареАрдХ рд╣реИ, рдХреНрдпрд╛ рд╣рдорд▓рд╛ рдХрд░рдирд╛ рд╣реИ?
рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдиреЗ рднреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣рдорд▓реЛрдВ рдХреЛ рдЬрдиреНрдо рджрд┐рдпрд╛ред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рд╡реЗ рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдЕрд╡рд░реЛрдзрди рд╣рдорд▓рд╛
рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛: рдПрдХ рд╡реИрдз рдПрдкреНрд▓рд┐рдХреЗрд╢рди (OAuth 2.0 рдХреНрд▓рд╛рдЗрдВрдЯ) рдФрд░ рдПрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди, рдЬрд┐рд╕рдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╡реИрдз рдПрдХ рд╣реА рдпреЛрдЬрдирд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рд╣реИред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЖрдВрдХрдбрд╝рд╛ рд╣рдорд▓реЗ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рдЪрд┐рддреНрд░ https://tools.ietf.org/html/rfc7636#section-1 рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИрдпрд╣рд╛рдВ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдЪрд░рдг 4 рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдЖрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реЗрджрди рдкрд░
code
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП
code
рдХреЛ рдореИрд▓рд╡реЗрдпрд░ рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рд╡реИрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд░рддрд╛ рд╣реИ)ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдореИрд▓рд╡реЗрдпрд░
code
рдХреЛ
access_token
рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЦреБрдж рдХреА рд╕реБрд░рдХреНрд╖рд╛ рдХреИрд╕реЗ рдХрд░реЗрдВ? рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЗрдВрдЯрд░рдкреНрд░реЛрд╕реЗрд╕ рд╕рдВрдЪрд╛рд░ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ; рд╣рдо рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдиреАрдЪреЗ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рд╕рд╛рдорд╛рдиреНрдп рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЖрдкрдХреЛ
рдХреЛрдб рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рдкреНрд░реВрдл рдХреА рдирд╛рдордХ рдПрдХ рдпреЛрдЬрдирд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рд╕рд╛рд░ рдиреАрдЪреЗ рдХреЗ рдЪрд┐рддреНрд░ рдореЗрдВ рдкрд░рд┐рд▓рдХреНрд╖рд┐рдд рд╣реЛрддрд╛ рд╣реИред
Https://tools.ietf.org/html/rfc7636#section-1.1 рд╕реЗ рд▓реА рдЧрдИ рдЫрд╡рд┐рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ, рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ:
code_verifier
,
code_challenge
(
t(code_verifier)
) рдФрд░
code_challenge_method
(
t_m
рдЖрд░реЗрдЦ рдкрд░)ред
Code_verifier
рд▓рдВрдмрд╛рдИ рдореЗрдВ рдХрдо рд╕реЗ рдХрдо 256 рдмрд┐рдЯреНрд╕ рдХреА рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕рдВрдЦреНрдпрд╛
рд╣реИ рдЬреЛ
рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рддреА рд╣реИ ред рдЕрд░реНрдерд╛рдд,
code
рд▓рд┐рдП
рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП
code
рдЧреНрд░рд╛рд╣рдХ рдХреЛ рдПрдХ рдирдпрд╛
code_verifier
рдЙрддреНрдкрдиреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
Code_challenge_method
рдПрдХ рд░реВрдкрд╛рдВрддрд░рдг рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд╛рдо рд╣реИ, рдЬреЛ рдЕрдХреНрд╕рд░ SHA-256 рд╣реИред
Code_challenge
рдПрдХ
code_verifier
рд╣реИ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП
code_challenge_method
рд░реВрдкрд╛рдВрддрд░рдг
code_challenge_method
рдХрд┐рдпрд╛ рдЧрдпрд╛
code_challenge_method
рдФрд░ рд╕реБрд░рдХреНрд╖рд┐рдд Base64 URL рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛
code_challenge_method
ред
code
рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╕рдордп
code_verifier
(рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рд▓реЙрдЧ рд╕реЗ) рдХреЗ рдЕрд╡рд░реЛрдзрди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХреЛрдб рд╡реИрдХреНрдЯрд░ рдХреЗ рдЦрд┐рд▓рд╛рдл
code_challenge
рд░реВрдкрд╛рдВрддрд░рдг рдЖрд╡рд╢реНрдпрдХ рд╣реИред
рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдбрд┐рд╡рд╛рдЗрд╕ SHA-256 рдХрд╛
рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ , рддреЛ рдПрдХ
рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреА рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ code_verifier рд░реВрдкрд╛рдВрддрд░рдг рдЧрд╛рдпрдм рди рд╣реЛ ред рдЕрдиреНрдп рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдкрдХреЛ SHA-256 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпреЛрдЬрдирд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддреА рд╣реИ:
- рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдХ
code_verifier
рдФрд░ рдЙрд╕реЗ рдпрд╛рдж рд░рдЦрддрд╛ рд╣реИред - рдХреНрд▓рд╛рдЗрдВрдЯ
code_challenge_method
рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ рдФрд░ code_challenge
рд╕реЗ code_verifier
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред - [рдЪрд░рдг A] рдХреНрд▓рд╛рдЗрдВрдЯ рдЕрдиреБрд░реЛрдз
code
, code_challenge
рдФрд░ code_challenge_method
рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ред - [рдЪрд░рдг B] рдкреНрд░рджрд╛рддрд╛ рд╕рд░реНрд╡рд░ рдкрд░
code_challenge
рдФрд░ code_challenge_method
рдХреЛ рдпрд╛рдж code_challenge
рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ code
рд▓реМрдЯрд╛рддрд╛ рд╣реИред - [рдЪрд░рдг C] рдХреНрд▓рд╛рдЗрдВрдЯ
access_token
рдЕрдиреБрд░реЛрдз access_token
, рдЬрд┐рд╕рдореЗрдВ access_token
code_verifier
рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред - рдкреНрд░рджрд╛рддрд╛ рдЖрдиреЗ рд╡рд╛рд▓реЗ
code_challenge
рд╕реЗ code_challenge
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ code_challenge
рдЦрд┐рд▓рд╛рдл рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╛рдж рд░рдЦрд╛ рдЧрдпрд╛ рдерд╛ред - [рдЪрд░рдг рдбреА] рдпрджрд┐ рдорд╛рди рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рджрд╛рддрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ
access_token
рдПрдХ access_token
рд╣реИред
рдЖрдЗрдП
code_challenge
рдХрд┐ рдХреНрдпреЛрдВ
code_challenge
рдПрдХ рдХреЛрдб рдЕрд╡рд░реЛрдзрди рд╣рдорд▓реЗ рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо
access_token
рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдгреЛрдВ рд╕реЗ
access_token
ред
- рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╡реИрдз рдЖрд╡реЗрджрди рдЕрдиреБрд░реЛрдз
code
( code_challenge
рдФрд░ code_challenge_method
рдПрдХ рд╕рд╛рде рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред - рдореИрд▓рд╡реЗрдпрд░
code
code_challenge
(рд▓реЗрдХрд┐рди code_challenge
рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЛрдИ code_challenge
рдирд╣реАрдВ рд╣реИ)ред - рдореИрд▓рд╡реЗрдпрд░
access_token
(рдорд╛рдиреНрдп code
рд╕рд╛рде, рд▓реЗрдХрд┐рди рдорд╛рдиреНрдп code_verifier
рдмрд┐рдирд╛ ) рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред - рд╕рд░реНрд╡рд░
code_challenge
рдмреЗрдореЗрд▓ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрддрд╛ рд╣реИред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдорд▓рд╛рд╡рд░ рдореЗрдВ
code_verifier
(рдпрд╛рджреГрдЪреНрдЫрд┐рдХ 256 рдмрд┐рдЯреНрд╕!) рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдирд╣реАрдВ рд╣реИ рдпрд╛ рдЗрд╕реЗ рд▓реЙрдЧ рдореЗрдВ рдХрд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ (
code_verifier
рдПрдХ рдмрд╛рд░ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдпрд╣ рд╕рдм рдПрдХ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рд╕реЗ рдХрдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ
code_challenge
рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдкреНрд░рд╢реНрди рдХрд╛ рдЙрддреНрддрд░ рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: "
access_token
рдХреЛ рдЙрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛
access_token
рдЬреЛ
code
рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рджреНрд╡рд╛рд░рд╛?"
OAuth 2.0 CSRF
рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, OAuth 2.0 рдХреЛ рдЕрдХреНрд╕рд░ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рддрдВрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ, OAuth 2.0 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИ рдХрд┐ OAuth 2.0 рднреЗрджреНрдпрддрд╛ рд╕реЗрд╡рд╛ рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдирд╣реАрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, OAuth 2.0 рдкрд░ CSRF рдХрд╛ рд╣рдорд▓рд╛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдФрд░ рдХрд╛ рдЦрд╛рддрд╛ рдЪреБрд░рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЯреИрдХреНрд╕реА рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдкреНрд░рджрд╛рддрд╛.рдХреЙрдо рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ OAuth 2.0 рдХреЗ рдЦрд┐рд▓рд╛рдл CSRF рд╣рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдЕрдкрдиреЗ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ attacker@provider.com рдкрд░ рд▓реЙрдЧ рдСрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЯреИрдХреНрд╕реА
code
рд▓рд┐рдП рдПрдХ
code
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╣рдорд▓рд╛рд╡рд░ OAuth 2.0 рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдмрдирд╛рддрд╛ рд╣реИ:
com.taxi.app://oauth?
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4
рдлрд┐рд░ рд╣рдорд▓рд╛рд╡рд░ рдкреАрдбрд╝рд┐рдд рдХреЛ рдПрдХ рд▓рд┐рдВрдХ рднреЗрдЬрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреИрдХреНрд╕реА рдкреНрд░рд╢рд╛рд╕рди рд╕реЗ рдПрдХ рдкрддреНрд░ рдпрд╛ рдПрд╕рдПрдордПрд╕ рдХреА рдЖрдбрд╝ рдореЗрдВред рдкреАрдбрд╝рд┐рдд рд▓рд┐рдВрдХ рдХрд╛
access_token
рдХрд░рддрд╛ рд╣реИ, рдЙрд╕рдХреЗ рдлреЛрди рдкрд░ рдПрдХ рдЯреИрдХреНрд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреБрд▓рддрд╛ рд╣реИ, рдЬреЛ
access_token
рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдкреАрдбрд╝рд┐рдд
рд╣рдорд▓рд╛рд╡рд░ рдХреЗ рдЯреИрдХреНрд╕реА рдЦрд╛рддреЗ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдкрдХрдбрд╝ рд╕реЗ рдЕрдирдЬрд╛рди, рдкреАрдбрд╝рд┐рдд рдЗрд╕ рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ: рдпрд╛рддреНрд░рд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдкрдиреЗ рдбреЗрдЯрд╛ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИ, рдЖрджрд┐ред
рдЕрдм, рдПрдХ рд╣рдорд▓рд╛рд╡рд░ рдХрд┐рд╕реА рднреА рд╕рдордп рдкреАрдбрд╝рд┐рдд рдХреЗ рдЯреИрдХреНрд╕реА рдЦрд╛рддреЗ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣ рд╣рдорд▓рд╛рд╡рд░@рдкреНрд░реЛрд╡рд╛рдЗрдбрд░.рдХреЙрдо рд╕реЗ рдмрдВрдзрд╛ рд╣реИред рд▓реЙрдЧрд┐рди рдкрд░ CSRF рдХреЗ рд╣рдорд▓реЗ рдиреЗ рдПрдХ рдЦрд╛рддрд╛ рдЪреЛрд░реА рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред
CSRF рдХреЗ рд╣рдорд▓реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ CSRF рдЯреЛрдХрди (рдЬрд┐рд╕реЗ
state
рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛
state
) рдХреЗ рд╕рд╛рде рд╕рдВрд░рдХреНрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛
state
, рдФрд░ OAuth 2.0 рдХреЛрдИ рдЕрдкрд╡рд╛рдж рдирд╣реАрдВ рд╣реИред CSRF рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ:
- рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЗрдирд░реЗрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореЛрдмрд╛рдЗрд▓ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ CSRF рдЯреЛрдХрди рд╕реНрдЯреЛрд░ рдХрд░рддрд╛ рд╣реИред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ
code
рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдореЗрдВ CSRF рдЯреЛрдХрди рд╢рд╛рдорд┐рд▓ рд╣реИред - рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рдорд╛рди CSRF рдЯреЛрдХрди рд▓реМрдЯрд╛рддрд╛ рд╣реИред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЗрдирдХрдорд┐рдВрдЧ рдФрд░ рд╕реНрдЯреЛрд░ рдХрд┐рдП рдЧрдП CSRF рдЯреЛрдХрди рдХреА рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдорд╛рди рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВ, рддреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЬрд╛рд░реА рд░рд╣рддреА рд╣реИред
CSRF рдЯреЛрдХрди рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ: рдХрдо рд╕реЗ рдХрдо 256 рдмрд┐рдЯ рд▓рдВрдмреА, рдЫрджреНрдо рдЖрдпрд╛рдореА рджреГрд╢реНрдпреЛрдВ рдХреЗ рдПрдХ рдЕрдЪреНрдЫреЗ рд╕реНрд░реЛрдд рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреАред
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, CSRF рдЯреЛрдХрди рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрд╕ рд╕рд╡рд╛рд▓ рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: "рдХреНрдпрд╛ рдореИрдВ
access_token
рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд░рд╣рд╛ рдерд╛, рдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдзреЛрдЦрд╛ рджреЗрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ?"
рдПрдХ рд╡реИрдз рдЧреНрд░рд╛рд╣рдХ рд╣реЛрдиреЗ рдХрд╛ рдирд╛рдЯрдХ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдореИрд▓рд╡реЗрдпрд░
рдХреБрдЫ рдореИрд▓рд╡реЗрдпрд░ рд╡реИрдз рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рдирдХрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЙрдирдХреА рдУрд░ рд╕реЗ рдПрдХ рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рдПрдХ рдРрд╕реА рд╕реНрдХреНрд░реАрди рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреЗрдЦрддрд╛ рд╣реИ: "рдореИрдВ ... рдХреЛ рдПрдХреНрд╕реЗрд╕ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╣рдордд рд╣реВрдВ")ред рдЕрдкреНрд░рднрд╛рд╡реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдЕрдиреБрдорддрд┐" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдореИрд▓рд╡реЗрдпрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдПрдВрдбреНрд░реЙрдЗрдб рдФрд░ рдЖрдИрдУрдПрд╕ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдкрд╛рд░рд╕реНрдкрд░рд┐рдХ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рджрд╛рддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рд╡реИрдзрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдЧрд░ OAuth 2.0 рддрдВрддреНрд░ рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдзрд╛рд░рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдЗрд╕ рд╣рдорд▓реЗ рд╕реЗ рдмрдЪрд╛рд╡ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред
рдЕрдиреНрдп рд╣рдорд▓реЗ
рд╣рдордиреЗ рдЙрди рд╣рдорд▓реЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХреА рдЬреЛ рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдирд┐рдпрдорд┐рдд OAuth 2.0 рдкрд░ рд╣рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛:
redirect_uri
рд╕реНрдкреВрдлрд┐рдВрдЧ, рдПрдХ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХрдиреЗрдХреНрд╢рди рдкрд░ рдпрд╛рддрд╛рдпрд╛рдд рдЕрд╡рд░реЛрдзрди, рдЖрджрд┐ред рдЖрдк
рдпрд╣рд╛рдВ рдЙрдирдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдХрд░реЗрдВ?
рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ OAuth 2.0 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдХрд┐ рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рдЗрд╕ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдХреНрдпрд╛ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдореМрдЬреВрдж рд╣реИрдВред рдЕрдм рдЖрдЗрдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреБрдХрдбрд╝реЛрдВ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛ рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦреЗрдВред
рдЕрдЪреНрдЫрд╛, рдмреБрд░рд╛ OAuth 2.0
рдЪрд▓рд┐рдП рд╢реБрд░реБрдЖрдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рдХреЛ рдареАрдХ рд╕реЗ рдмрдврд╝рд╛рдПрдВред рдореЛрдмрд╛рдЗрд▓ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░, рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдПрдХ рд╡реЗрдм рдкреЗрдЬ рдЦреЛрд▓рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ (рджреЗрд╢реА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдЙрджрд╛рд╣рд░рдг: Mail.Ru рдореЗрд▓, рд╡реАрдХреЗ, рдлреЗрд╕рдмреБрдХ)ред

рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдЯреИрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдмрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ)ред
рдиреЛрдЯ : рдПрдВрдбреНрд░реЙрдЗрдб рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдЯреИрдм рдХреЛ рдХреНрд░реЛрдо рдХрд╕реНрдЯрдо рдЯреИрдм рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ iOS SafariViewController рдкрд░ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЯреИрдм рд╣реИ, рдЬреЛ рд╕реАрдзреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рдмреАрдЪ рдХреЛрдИ рджреГрд╢реНрдп рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рдирд╣реАрдВ рд╣реИред
рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рдХреЛ "рдмрдврд╝рд╛рдПрдБ WebView" (рджрд╛рдИрдВ рдУрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕реЗ рдмрд╣реБрдд рдмреБрд░рд╛ рдорд╛рдирддрд╛ рд╣реВрдВред
WebView рдПрдХ рджреЗрд╢реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреИрдВрдбрдЕрд▓реЛрди рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╣реИред
рдПрдХ "рд╕реНрдЯреИрдВрдб-рдЕрд▓реЛрди
рдмреНрд░рд╛рдЙрдЬрд╝рд░ " рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗрдмрд╡реНрдпреВ, рдХреВрдлрд╝ рдФрд░ рдХреНрд░реЛрдо рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдХреБрдХреАрдЬрд╝, рд╕реНрдЯреЛрд░реЗрдЬ, рдХреИрд╢, рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдЕрдиреНрдп рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдБрдЪ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рднреА рд╕рд╣реА рд╣реИ: рд╕рдлрд╛рд░реА рдФрд░ рдХреНрд░реЛрдо рд╡реЗрдм рд╡реНрдпреВ рдбреЗрдЯрд╛ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
"
рджреЗрд╢реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ " рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рд╡реЗрдмрд╡реНрдпреВ рдХреЛ рдмрдврд╝рд╛рдиреЗ рд╡рд╛рд▓реЗ рдореВрд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХреБрдХреАрдЬрд╝, рд╕реНрдЯреЛрд░реЗрдЬ, рдХреИрд╢, рдЗрддрд┐рд╣рд╛рд╕ рдФрд░ рдЕрдиреНрдп рд╡реЗрдмрд╡реНрдпреВ рдбреЗрдЯрд╛ рддрдХ
рдкреВрд░реА рдкрд╣реБрдВрдЪ рд╣реИред
рдЕрдм рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рд▓реЙрдЧ рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ..." рдмрдЯрди рджрдмрд╛рддрд╛ рд╣реИ рдФрд░ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ WebView рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдВрдЧрддрд╛ рд╣реИред
рд╕рднреА рдореЛрд░реНрдЪреЛрдВ рдкрд░ рдПрдХ рдмрд╛рд░ рд╡рд┐рдлрд▓рддрд╛:
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдЦрд╛рддреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЪреБрд░рд╛ рд╕рдХрддрд╛ рд╣реИред
- OAuth 2.0 рдХреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рддрд╛ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рди рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдХрд╣реАрдВ рднреА рд▓реЙрдЧрд┐рди рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреА рдЖрджрдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдлрд╝рд┐рд╢рд┐рдВрдЧ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдмрдврд╝ рдЬрд╛рддреА рд╣реИред
рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рд╕рднреА рддрд░реНрдХ WebView рдХреЗ рд╡рд┐рд░реБрджреНрдз рд╣реИрдВ, рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕реНрд╡рдпрдВ рдмрддрд╛рддрд╛ рд╣реИ: рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдЯреИрдм рдмрдврд╝рд╛рдПрдВред
рдпрджрд┐ рдЖрдк рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдЯреИрдм рдХреЗ рдмрдЬрд╛рдп WebView рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рддрд░реНрдХ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦреЗрдВ, рдореИрдВ рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред
рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛
рд╣рдо рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдЕрдиреБрджрд╛рди рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдПрдХ
code_challenge
рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдПрдХ рдХреЛрдб рдЕрд╡рд░реЛрдзрди рд╣рдорд▓реЗ рд╕реЗ
code_challenge
рдХреЛ рдмрдЪрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЫрд╡рд┐ https://tools.ietf.org/html/rfc8252#section-4.1 рд╕реЗ рд▓реА рдЧрдИ рд╣реИрдХреЛрдб рдЕрдиреБрд░реЛрдз (рдЪрд░рдг 1-2) рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
https://o2.mail.ru/code?
redirect_uri=com.mail.cloud.app%3A%2F%2Foauth&
anti_csrf=927489cb2fcdb32e302713f6a720397868b71dd2128c734181983f367d622c24& code_challenge=ZjYxNzQ4ZjI4YjdkNWRmZjg4MWQ1N2FkZjQzNGVkODE1YTRhNjViNjJjMGY5MGJjNzdiOGEzMDU2ZjE3NGFiYw%3D%3D&
code_challenge_method=S256&
scope=email%2Cid&
response_type=code&
client_id=984a644ec3b56d32b0404777e1eb73390c
рдЪрд░рдг 3 рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдорд┐рд▓рддреА рд╣реИ:
com.mail.cloud.app://outh?
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4&
anti_csrf=927489cb2fcdb32e302713f6a720397868b71dd2128c734181983f367d622c24
рдЪрд░рдг 4 рдореЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдпреВрдЖрд░рдЖрдИ рдпреЛрдЬрдирд╛ рдЦреЛрд▓рддрд╛ рд╣реИ рдФрд░
code
рдФрд░ рд╕реАрдПрд╕рдЖрд░рдПрдл рдЯреЛрдХрди рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реИред
access_token
(рдЪрд░рдг 5) рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз:
https://o2.mail.ru/token?
code_verifier=e61748f28b7d5daf881d571df434ed815a4a65b62c0f90bc77b8a3056f174abc&
code=b57b236c9bcd2a61fcd627b69ae2d7a6eb5bc13f2dc25311348ee08df43bc0c4&
client_id=984a644ec3b56d32b0404777e1eb73390c
рдЕрдВрддрд┐рдо рдЪрд░рдг
access_token
рд╕рд╛рде рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдЙрдкрд░реЛрдХреНрдд рдпреЛрдЬрдирд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ, рд▓реЗрдХрд┐рди рдРрд╕реЗ рд╡рд┐рд╢реЗрд╖ рдорд╛рдорд▓реЗ рднреА рд╣реИрдВ рдЬрд┐рдирдореЗрдВ OAuth 2.0 рдХреЛ рд╕рд░рд▓ рдФрд░ рдереЛрдбрд╝рд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
Android IPC
рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмреАрдЪ рджреЛ-рддрд░рдлрд╝рд╛ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдПрдХ рддрдВрддреНрд░ рд╣реИ: IPC (рдЕрдВрддрд░-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рдВрдЪрд╛рд░)ред IPC рдХреЛ рджреЛ рдХрд╛рд░рдгреЛрдВ рд╕реЗ рдХрд╕реНрдЯрдо URI рдпреЛрдЬрдирд╛ рд╕реЗ рдЕрдзрд┐рдХ рдкрд╕рдВрдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
- рдПрдХ рдЖрдИрдкреАрд╕реА рдЪреИрдирд▓ рдЦреЛрд▓рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдкрдиреЗ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЦреЛрд▓реЗ рдЧрдП рдЖрд╡реЗрджрди рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рднреА рд╕рддреНрдп рд╣реИ: рдПрдХ рдЦреБрд▓рд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдкреНрд░рд╛рдорд╛рдгрд┐рдХрддрд╛ рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдЦреЛрд▓рд╛ рдерд╛ред
- рдЖрдИрдкреАрд╕реА рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдХрд░, рдкреНрд░реЗрд╖рдХ рдЙрд╕реА рдЪреИрдирд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЖрдкрд╕реА рд╕рддреНрдпрд╛рдкрди (рдЖрдЗрдЯрдо 1) рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдХреЛрдИ рднреА рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рдХреНрд░рд┐рдпрд╛
access_token
рдХреЛ рдмрд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ access_token
ред

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо
Implicit Grant рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛ рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдХреЛрдИ
code_challenge
рдФрд░ CSRF рдЯреЛрдХрди рдирд╣реАрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рд╕реНрд╡рдпрдВ рдХреЛ рдореИрд▓рд╡реЗрдпрд░ рд╕реЗ рдмрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЦрд╛рддреЛрдВ рдХреЛ рдЪреЛрд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡реИрдз рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВред
рдЧреНрд░рд╛рд╣рдХ рдПрд╕рдбреАрдХреЗ
рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреНрд░рджрд╛рддрд╛ рдХреЛ рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрд╕рдбреАрдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЧреНрд░рд╛рд╣рдХ рдкрдХреНрд╖ рдкрд░ OAuth 2.0 рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдЧрд╛ рдФрд░ рд╕рд╛рде рд╣реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░реЗрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛
OAuth 2.0 рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ "рд╕рд┐рдХреНрдпреЛрд░ рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдЪреЗрдХрд▓рд┐рд╕реНрдЯ" рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛:
- рдПрдХ рдареЛрд╕ рдиреАрдВрд╡ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдзрд╛рд░ рдпреЛрдЬрдирд╛ рдпрд╛ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪреБрдирддреЗ рд╣реИрдВред рдЕрдкрдирд╛ OAuth 2.0 рд╕реНрдХреАрдорд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╕рдордп, рдПрдХ рдЧрд▓рддреА рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рджреВрд╕рд░реЛрдВ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдзрдХреНрдХреЛрдВ рдХреЛ рднрд░ рджрд┐рдпрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдХрд░реНрд╖ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреА рдЧрд▓рддрд┐рдпреЛрдВ рд╕реЗ рд╕реАрдЦрдиреЗ рдФрд░ рддреБрд░рдВрдд рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд░рдиреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЧрд▓рдд рдирд╣реАрдВ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдпреЛрдЬрдирд╛ рд╡реНрд╣рд╛рдЯ рдЯреВ рдбреВ рд╕реЗрдХреНрд╢рди рдореЗрдВ рдПрдХ рд╣реИред
Access_token
рдФрд░ рдЕрдиреНрдп рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛: iOS рдХреЗ рддрд╣рдд - рдХрд┐рдЪреЗрди рдореЗрдВ, рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рддрд╣рдд - рдЗрдВрдЯрд░рдирд▓ рд╕реНрдЯреЛрд░реЗрдЬ рдореЗрдВред рдпреЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдРрд╕реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдП рдЧрдП рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд╛рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредCode
рдПрдХ рд╕рдордп рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдПрдХ рдЫреЛрдЯреЗ рдЬреАрд╡рди рд╕рдордп рдХреЗ рд╕рд╛рдеред- рдХреЛрдб рдЕрд╡рд░реЛрдзрди рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
code_challenge
рдЙрдкрдпреЛрдЧ code_challenge
ред - рд▓реЙрдЧрд┐рди рдкрд░ рдПрдХ рд╕реАрдПрд╕рдЖрд░рдПрдл рд╣рдорд▓реЗ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реАрдПрд╕рдЖрд░рдПрдл рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рд╕рд╣рдорддрд┐ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП WebView рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╕реНрдЯрдо рдЯреИрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдЕрдЧрд░ рдпрд╣ рдмреИрдХрдПрдВрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рд╣реИ рддреЛ
Client_secret
рдмреЗрдХрд╛рд░ рд╣реИред рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рди рджреЗрдВред - HTTP рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХреЗ рдирд┐рд╖реЗрдз рдХреЗ рд╕рд╛рде, рд╣рд░ рдЬрдЧрд╣ HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
- рдорд╛рдирдХреЛрдВ рд╕реЗ рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ (рд╕рд┐рдлрд░ рдЪрдпрди, рдЯреЛрдХрди рд▓рдВрдмрд╛рдИ, рдЖрджрд┐) рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред рдЖрдк рдбреЗрдЯрд╛ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдХреНрд░рд┐рдкреНрдЯреЛрдЧреНрд░рд╛рдлреА рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ ред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ, рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк OAuth 2.0 рдХреЗ рд▓рд┐рдП рдХреМрди рдЦреЛрд▓рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рджрд╛рддрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ, рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ OAuth 2.0 рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреМрди рдЦреЛрд▓рддрд╛ рд╣реИред
- рд╕рд╛рдорд╛рдиреНрдп OAuth 2.0 рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдЕрд╡рдЧрдд рд░рд╣реЗрдВред рдореЛрдмрд╛рдЗрд▓ OAuth 2.0 рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреВрд░рдХ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрд┐рд╕реА рдиреЗ рдирд┐рдпрдорд┐рдд OAuth 2.0 рдХреЗ рд▓рд┐рдП рд╕рдЯреАрдХ рдореИрдЪреЛрдВ рдФрд░ рдЕрдиреНрдп рд╕рд┐рдлрд╛рд░рд┐рд╢реЛрдВ рдХреЗ рд▓рд┐рдП
redirect_uri
рдЪреЗрдХ рдХреЛ рд░рджреНрдж рдирд╣реАрдВ рдХрд┐рдпрд╛ред - рдПрд╕рдбреАрдХреЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВред рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкрд╛рд╕ рдХреЛрдб рдореЗрдВ рдХрдо рдмрдЧ рдФрд░ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рд╣реЛрдВрдЧреА, рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ OAuth 2.0 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред
рдХреНрдпрд╛ рдкрдврд╝рдирд╛ рд╣реИ?
- [RFC] OAuth 2.0 рдиреЗрдЯрд┐рд╡ рдПрдкреНрд╕ рдХреЗ рд▓рд┐рдП https://tools.ietf.org/html/rfc8252
- рдореЛрдмрд╛рдЗрд▓ рдФрд░ рдбреЗрд╕реНрдХрдЯреЙрдк рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП Google OAuth 2.0 https://developers.google.com/identity/protocols/OAuth2EInallerApps
- [RFC] OAuth рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреЛрдб рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХреЗ рд▓рд┐рдП рд╕рдмреВрдд https://tools.ietf.org/html/rfc7636
- OAuth 2.0 рд░реЗрд╕ рдХрдВрдбреАрд╢рди https://hackerone.com/reports/55140
- [RFC] OAuth 2.0 рдЦрддрд░рд╛ рдореЙрдбрд▓ рдФрд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рд╡рд┐рдЪрд╛рд░ https://tools.ietf.org/html/rfcF6819
- рдирд┐рдпрдорд┐рдд OAuth 2.0 рдкрд░ рд╣рдорд▓реЛрдВ https://sakurity.com/oauth
- [RFC] OAuth 2.0 рдбрд╛рдпрдиреЗрдорд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░реЛрдЯреЛрдХреЙрд▓ https://tools.ietf.org/html/rfc7591
рдзрдиреНрдпрд╡рд╛рдж
рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд▓рд┐рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕рд░реНрдЧреЗрдИ рдмреЗрд▓реЛрд╡, рдПрдВрдбреНрд░реА рд╕реНрдпреВрдорд┐рди, рдПрдВрдбреНрд░реА рд▓реИрдмрдВрдЯреНрд╕ (
@isciurus ) рдФрд░ рдбрд╛рд░рд┐рдпрд╛ рдпрд╛рдХреЛрд╡рд▓реЗрд╡рд╛ред