рдЬрдм https://github.com/oauthlib/oauthlib/issues/495 рдХреЛ рдорд░реНрдЬ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддрдм рд╕реЗ рдореБрдЭреЗ request/requests-oauthlib рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рдорд╛рд╕реНрдЯрд░ рдореЗрдВ рдПрдХ рд░рд┐рдЧреНрд░реЗрд╢рди рдорд┐рд▓рд╛ред рдпрд╣ рдХреЗрд╡рд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреБрджрд╛рди/рд╡реЗрдм рдЖрд╡реЗрджрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред
рдЕрдиреБрд░реЛрдз-oauthlib рдХрд╛ рдореВрд▓ рдЙрдкрдпреЛрдЧ рд╣реИ:
sess = OAuth2Session(client_id)
token = sess.fetch_token(token_url, client_secret=client_secret, authorization_response=request.url)
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рдж рд╕реЗ, рд╕рддреНрд░ рдХреЗ client_id
рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ https://github.com/oauthlib/oauthlib/pull/505 рдиреЗ рдПрдХ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рддрдп рдХрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдПрдХ рдФрд░ рддреЛрдбрд╝ рджрд┐рдпрд╛ред рд╣рдореЗрдВ рдПрдХ рдЬреАрдд-рдЬреАрдд рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред
request-oauthlib рдХреЛрдб рдХреЙрд▓ https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L196 -L198 рдФрд░ oauthlib рдкрд░ рдпрд╣рд╛рдВ рдХреЙрд▓ рдХрд░реЗрдВред
https://github.com/oauthlib/oauthlib/blame/master/oauthlib/oauth2/rfc6749/clients/web_application.py#L128.
рдореЗрд░реА рдкрд╣рд▓реА рд╕реЛрдЪ prepare_request_body
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реИ, рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, WebApplicationClient
рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ self.client_id
рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдлрд┐рд░, &client_id=xx
рдХреЛ prepare_request_body
рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрдирд▓рд╛рдЗрди рдбреЙрдХреНрд╕ рдХреЛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдВрдд рдореЗрдВ, рдореВрд▓ рд╕реБрдзрд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ args рд╕реЗ client_id
рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдФрд░ prepare_request_body
рдПрдХ рдирдпрд╛ рддрд░реНрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреИрд╕реЗ include_client=True/False
рджреЛрдиреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП client_id
рд╢рд░реАрд░ рдореЗрдВ client_secret
, рдпрд╛ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВред
рд╡рд┐рдЪрд╛рд░?
рдкреНрд░рд╣рд╛рд░ @Diaoul @skion @thedrow
рд╡реНрд╣рд╛рдЯ рдЕрдмрд╛рдЙрдЯ:
рдореИрдВ args рд╕реЗ client_id рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реНрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ include_client=True/False рджреЛрдиреЛрдВ рдореЗрдВ client_id рдФрд░ client_secret рдЬреЛрдбрд╝реЗрдВ, рдпрд╛ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВред
рдзрдиреНрдпрд╡рд╛рдж
рдореИрдВрдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдкрдиреЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕реА рдореБрджреНрджреЗ рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдпрд╣рд╛рдВ рдЕрдиреБрд░реЛрдзреЛрдВ/oauthlib рдХреЗ рдЦрд┐рд▓рд╛рдл рджрд╛рдпрд░ рдХрд┐рдпрд╛: https://github.com/requests/requests-oauthlib/issues/330
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ request_oauthlib рдХреА рдЧрд▓рддреА рд╣реИред рдЬрдм рдЖрдк рдкреГрд╖реНрда рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрдирдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ - рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХреЗ рдкреВрд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рдкрд╣рд▓рд╛ рдЙрджрд╛рд╣рд░рдг - OAuth2Session
рдХрдиреНрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдореЗрдВ client_id
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рд╕рдорд░реНрдердиред рд▓рд╛рдЗрди 200 рдкрд░ рддрд░реНрдХ kwargs рд╕реЗ client_id
рдЦреАрдВрдЪрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд WebApplicationClient
рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдЦреАрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдлреЙрд▓рдмреИрдХ рдирд╣реАрдВ рд╣реИред
@jvanasco , рдореМрдЬреВрджрд╛ рдЕрдВрдХ #585 рдХреЛ рдХреЗрд╡рд▓ request-oauthlib рдореЗрдВ, рдпрд╛ oauthlib рдХреЗ PR #505 рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдХреЗ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХреЛрдИ рднреА рд╕рдорд╛рдзрд╛рди https://github.com/oauthlib/oauthlib/pull/505#issuecomment -351221107 рдкрд░ рдЕрдкрдиреА рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ @skion рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред
рдХрд▓реНрдкрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдирдзрд┐рдХреГрдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдЧреЛрдкрдиреАрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЯреЛрдХрди рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдЕрдзрд┐рдорд╛рдирддрдГ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдкреНрд░рдорд╛рдгрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрджреАрджрд╛ рддрдВрддреНрд░ HTTP рдмреЗрд╕рд┐рдХ рдСрде рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣реЛрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, WebApplication рд╡рд░реНрдЧ рдореЗрдВ рд╣рдореЗрд╢рд╛ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЬреЛ рдХреБрдЫ рд╕рд░реНрд╡рд░реЛрдВ рдХреЛ рддреЛрдбрд╝рддрд╛ рд╣реИ) рд╕рд╛рде рд╣реА рдЗрд╕реЗ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
Oauthlib рдХреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реБрдВрджрд░ рдФрд░ рд╕рд░рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП-oauthlib рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрджрд┐ рд╣рдо рдЗрд╕ рдЪрд░реНрдЪрд╛ рдореЗрдВ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдвреВрдВрдв рд╕рдХреЗрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛; рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдЕрд╡рд░реЛрдзрдХ рд╣реИред
рдХреНрдпрд╛ client_id=False
рдХреЛ prepare_request_body()
рдореЗрдВ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рдХрд┐ рдХреЛрдИ client_id рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рд╣реИ? рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдХреБрд░реВрдкрддрд╛ рдХреЛ рд▓рд╛рдЗрди 126 рдХреЗ рдкрд╛рд╕ рд▓реЗ рдЬрд╛рдПрдЧрд╛:
client_id = None if client_id=False else self.client_id
рдУрд╣ рд╕рдордЭрд╛ред
рдХреНрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдХреЛ рдмрдирд╛рдо рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдореМрдЬреВрджрд╛ рдпреВрдирд┐рдЯ-рдЯреЗрд╕реНрдЯ рд╣реИ? рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕реВрдЪреА рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдореБрдЭреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА рдФрд░ рдЕрдиреБрд░реЛрдз-oauthlib, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рдореЗрд░реЗ рдХреБрдЫ рдХрд╛рдо рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред
@JonathanHuot
рдореИрдВ args рд╕реЗ client_id рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛, рдФрд░ рддреИрдпрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рддрд░реНрдХ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдЬреИрд╕реЗ рдХрд┐ include_client=True/False рджреЛрдиреЛрдВ рдореЗрдВ client_id рдФрд░ client_secret рдЬреЛрдбрд╝реЗрдВ, рдпрд╛ рдЙрди рджреЛрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВред
рдЗрд╕реЗ рд╡рд╛рдкрд╕ рдкрдврд╝рдХрд░, рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХрд╛ рд╕реБрдЭрд╛рд╡ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрд╛ред рд╣рдо рд╢рд╛рдпрдж рдЗрд╕реЗ рдЧреИрд░-рдмреНрд░реЗрдХрд┐рдВрдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд░рдиреЗ рд╕реЗ рджреВрд░ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА **kwargs
рд▓реЗрддрд╛ рд╣реИред
рдПрдХ рдиреЛрдЯ:
рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ_рд╕реЗрдХреНрд░реЗрдЯ рджреЛрдиреЛрдВ рдХреЛ рд╢рд░реАрд░ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП
рдЪреВрдВрдХрд┐ рдпрд╣ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЧреНрд░рд╛рд╣рдХреЛрдВ IIUC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЗрд╕рдореЗрдВ client_secret
рд╢рд╛рдорд┐рд▓ рд╣реИ; рдпрд╣ рд╕рд┐рд░реНрдл client_id
рдХреЛ рд╢рд░реАрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ? рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВ рдирдП рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ include_client_id=True/False
рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдореИрдВ рдирдП рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ include_client_id=True/False рдХрд░рдиреЗ рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ! client_secret
рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ WebApplicationClient
рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред
@jvanasco , рдЕрдЧрд░ рдЖрдк рдкреАрдЖрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрджрд▓рд╛рд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
рез) https://github.com/oauthlib/oauthlib/pull/505 . рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдПрдВ
2) рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдмрджрд▓реЗрдВ prepare_request_body()
рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП client_id
рдФрд░ рдЬреЛрдбрд╝рдиреЗ include_client_id=True/False
( True
(рдбрд┐рдлрд╝реЙрд▓реНрдЯ): рдпрд╣ рдХрд╣рддреЗ рд╣реИрдВ self.client_id
)
рдлрд┐рд░, request-oauthlib рдХреЗ рдкрд╛рд╕ https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L196-L211 рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛:
рдП) рд╢рд░реАрд░ рдореЗрдВ рдЕрдХреЗрд▓реЗ client_id
рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ
self._client.prepare_request_body(..)
рдмреА) client_id
рдФрд░ client_secret
рдХреЛ auth
рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд░реЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмреЙрдбреА рдореЗрдВ рд╢рд╛рдорд┐рд▓ рди рдХрд░реЗрдВ (рдЖрд░рдПрдлрд╕реА рдкрд╕рдВрджреАрджрд╛ рд╕рдорд╛рдзрд╛рди)
self._client.prepare_request_body(include_client_id=False, ..)
auth = requests.auth.HTTPBasicAuth(client_id, client_secret)
рд╕реА) рд╢рд░реАрд░ рдореЗрдВ client_id
рдФрд░ client_secret
(рдЖрд░рдПрдлрд╕реА рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди)
self._client.prepare_request_body(client_secret=client_secret, ..)
рдореИрдВ рдЖрдЬ рджреЛрдиреЛрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрдирд╕рдВрдкрд░реНрдХ рдЙрддреНрдкрдиреНрди рдХрд░реВрдВрдЧрд╛ред
рдореЗрд░реЗ рдкрд╛рд╕ OAuthlib рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рдкреАрдЖрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ...
рдХреНрдпрд╛ client_id
рдЕрднреА рднреА рдХреНрд╡рд╛рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрдорддрд┐ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП? рдпрд╣ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рдирд╛рд░реЗ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рднреА рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рд╡рд┐рдзрд┐ рдХреБрдЫ рд╣рдж рддрдХ рдЯреВрдЯ рдЧрдИ рдереА, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдпрд╛ рддреЛ рдЗрд╕реЗ рдЗрд░рд╛рджреЗ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕реЗ prepare_request_body
рдореЗрдВ self.client_id рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЗрдЬрд╛рдЬрдд рджреЗрдиреЗ рдореЗрдВ) рдпрд╛ рдЧрд▓рдд рдЙрдкрдпреЛрдЧ рдкрд░ рдЕрдкрд╡рд╛рдж рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП (рдЬреИрд╕рд╛ рдХрд┐ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рд╣реИ) рдПрдХ рддреНрд░реБрдЯрд┐ рдЕрдЧрд░ client_id
рдкреНрд░рджрд╛рди рдХреА рдЬрд╛рддреА рд╣реИ рд▓реЗрдХрд┐рди self.client_id
рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА)ред
рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднрд┐рдиреНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдХрднреА рднреА client_id
рдХреЛ рдХреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
рдХреНрдпрд╛ рд╣рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ DeprecationWarning
рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ client_id
рдПрдХ kwarg рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?
рдкреАрдЖрд░ #593 рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдЬрдм client_id
рд╕рдмрдорд┐рдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдПрдХ рдмрд╣рд┐рд╖реНрдХрд░рдг рдЪреЗрддрд╛рд╡рдиреА рдЙрдард╛рддрд╛ рд╣реИ, рдФрд░ рдПрдХ ValueError рдЕрдЧрд░ рдпрд╣ self.client_id
рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдирдпрд╛ рдкрд░реАрдХреНрд╖рдг рднреА рд╣реИ рдЬреЛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдк рд╕реЗ @JonathanHuot рдХреЗ рддреАрди рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдореЗрд░реА рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛- oauthlib рдкреАрдЖрд░ рдЙрдореНрдореАрджрд╡рд╛рд░ рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВ рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрддрд╛ рд╣реВрдВ
рдпрд╣ рд╣рдореЗрд╢рд╛ prepare_request_body
рд╕рд╛рде username=username, password=password
рдЖрд╣реНрд╡рд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЖрд░рдПрдлрд╕реА рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдЙрддреНрддрд░ рдЬрд╛рдирддрд╛ рд╣реИ:
username
+ password
рдХрднреА рднреА request.body рдореЗрдВ рдПрдХ рдкрд░рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?username
+ password
HTTP рдмреЗрд╕рд┐рдХ рдСрдереЗрдВрдЯ рд╣реЗрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?username
+ password
рдмреЙрдбреА рдкреИрд░рд╛рдореНрд╕ рдФрд░ HTTPBasicAuth рд╣реЗрдбрд░ рджреЛрдиреЛрдВ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ?рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
username
рдФрд░ password
рд╣рд░ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдиреБрджрд╛рди рдЙрд░реНрдл тАЛтАЛрд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЕрдиреБрджрд╛рдиреЛрдВ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд, рдХреЛрдб, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПредclient_secret
)ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрднреА рднреА HTTP рдмреЗрд╕рд┐рдХ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдореЗрдВ рдзрдиреНрдпрд╡рд╛рджред рдмрд╕ рджреЛ рдмрд╛рддреЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭрд╕реЗ рдмрд╛рдд рдХрд░реЗрдВ рдЬреИрд╕реЗ рдореИрдВ рдкрд╛рдБрдЪ рд╕рд╛рд▓ рдХрд╛ рд╣реВрдБред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рдорд┐рд▓реЗ:
рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдкрд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?
рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрди рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдФрд░ рдЬреБрдиреВрдиреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗ рдХреЛ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓реЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХреЗрдВ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдЧрдорди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред
@jvanasco , рдореИрдВ OAuth2 RFC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ requests-oauthlib
рдФрд░ flask-oauthlib
рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред
рд╕рд╣реАред
рдпрд╣ рдореЗрд░реА рд╕рдордЭ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреНрд╖реЗрддреНрд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛; рдпрд╛рдиреА рдЕрдиреБрд░реЛрдз-oauthlib рдФрд░ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░рджрд╛рддрд╛рдУрдВ рдХреЗ рдЕрдиреБрднрд╡реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХрд╛рдзрд┐рдХ рдЕрдиреБрд░реЛрдз-oauthlib рдЪрд░реНрдЪрд╛ https://github.com/requests/requests-oauthlib/issues/218 , https://github.com/requests/requests-oauthlib/issues/211 , https://github.com/requests /requests-oauthlib/issues/264 , рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдЙрдиреНрд╣реЗрдВ client password
рдФрд░ client secret
рдмреАрдЪ рдПрдХ рднреНрд░рдо рдерд╛ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЗ рд▓рд┐рдП рджреЛ рд╢рдмреНрдж рд╣реИрдВред
рдЕрдЧрд░ рд╣рдо https://github.com/requests/requests-oauthlib/pull/206 рдХреЗ рдкреАрдЫреЗ рдХреЗ рддрд░реНрдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдкреАрдЖрд░ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрднреА рднреА HTTPAuth(username, password)
рдЬреЛрдбрд╝рдиреЗ рдЬреИрд╕реА рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ HTTPAuth(client_id, client_secret
рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдкреЛрдХ @Lukasa , @chaosct , @ibuchanan рдЬрд┐рд╕рдиреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рднрд╛рдЧ рд▓рд┐рдпрд╛-oauthlib рдХреА рдЪрд░реНрдЪрд╛ред
рдорд╣рд╛рди! рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рдЕрдиреБрд░реЛрдз рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд░рдЦрд░рдЦрд╛рд╡ рдкреАрдЖрд░ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрджрд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╣рд╛рдВ, рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП: рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрджрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рднрд╛рдЧ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ:
рдЕрдиреБрд░реЛрдз-рдирд┐рдХрд╛рдп рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рд╣рд┐рдд
рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ
рдФрд░ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдЧреНрд░рд╛рд╣рдХреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
HTTP рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдпреЛрдЬрдирд╛...
рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдкрдврд╝рддрд╛ рд╣реИ:
рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд░реНрд╡рд░ рд╕рд╣рд┐рдд рд╕рдорд░реНрдерди рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рдЕрдиреБрд░реЛрдз-рдирд┐рдХрд╛рдп рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ ...
рдПрдХ рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рдЧреНрд░рд╛рд╣рдХ, рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдирд╣реАрдВ рднреЗрдЬреЗрдЧрд╛ред
рд▓реЗрдХрд┐рди, рдХреБрдЫ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╕рд░реНрд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рд╡реЗ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВрдЧреЗред
рдЕрдЧрд░ рдореБрдЭреЗ рд╕рд╣реА рд╕реЗ рдпрд╛рдж рд╣реИ, рддреЛ рдореЗрд░реЗ рдкреАрдЖрд░ рдиреЗ рдСрде рд╣реЗрдбрд░ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕ рднреНрд░рдо рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛,
рддреЛ рдЧреНрд░рд╛рд╣рдХ рджреЛрдиреЛрдВ рднреЗрдЬрддрд╛ рд╣реИред
рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ @JonathanHuot рджреВрд╕рд░реЗ рдмрд┐рдВрджреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╣реА рд╣реИред
рд╣рд╛рдп @ibuchanan , рдЬрд┐рди рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ client credentials
рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рд╛рдореА (рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛) рдХреЗ рд╕рд╛рде рди рдорд┐рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд╡рдзрд╛рди рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред
рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ rfc6749#1.1 ред
рдпрд╣ client credentials
client_id
рдФрд░ client_secret
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрди рд╕реНрд╡рд╛рдореА username
рдФрд░ password
рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡реЗ рд╡рд┐рдирд┐рдореЗрдп рдирд╣реАрдВ рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, рдЙрди рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде RFC рдХреЛ рдкрдврд╝рдиреЗ рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдПрдХ рдЖрдЬреНрдЮрд╛рдХрд╛рд░реА рдЧреНрд░рд╛рд╣рдХ рдХреЛ HTTP рдмреЗрд╕рд┐рдХ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ ( client_id
, client_secret
) рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ ( username
, password
) рднреЗрдЬрдирд╛ рдЪрд╛рд╣рд┐рдПред rfc6749#4.3.2 ред
рдХреБрдЫ рд╕рд░реНрд╡рд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ (400) рдпрджрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣реИ
рддрдиред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡рд╣реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдпреБрдХреНрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рд╣реИред
рдареАрдХред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ oauthlib
рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдкреАрдЖрд░ рдЙрдкрд░реЛрдХреНрдд рдЪрд┐рдВрддрд╛рдУрдВ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ - include_client_id
рдзреНрд╡рдЬ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ client_id
рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВред
requests_oauthlib
рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореИрдВ рдпрд╣реА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ:
username
рдФрд░ password
рдХреЗрд╡рд▓ рдмреЙрдбреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ (HTTP рдмреЗрд╕рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ)ред рдпрджрд┐ рдЧреИрд░-рдЕрдиреБрдкрд╛рд▓рдХ рд╕рд░реНрд╡рд░ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ auth
рдпрд╛ headers
рддрд░реНрдХ рдХреЛ fetch_token()
рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ client_id
рдХреА рдЖрдкреВрд░реНрддрд┐ рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рддрд░реНрдХ рдФрд░ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдиреАрдЪреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреБрдЫ рд╕рдореАрдХреНрд╖рд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореЗрд░реЗ рдкрд╛рд╕ @JonathanHuot рдФрд░ @ibuchanan рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд░рд╢реНрди рд╣реИ:
oauthlib
рдХреЗ OAuth2 Client
рдФрд░ requests_oauthlib
рдХреЗ OAuth2Session
рдореЗрдВ client_secret
рдФрд░ рдмрд╛рд░-рдмрд╛рд░ рдЗрд╕рдХрд╛ рдЖрд╣реНрд╡рд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред OAuth1 рдореЗрдВ рдРрд╕рд╛ рдирд╣реАрдВ рдерд╛, рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ #370 рдХреЗ рдкреАрдЫреЗ рдпрд╣реА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдореБрджреНрджрд╛ рдерд╛ред RFC рдиреЗ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдореБрдЭреЗ рдХреЛрдИ рдЗрддрд┐рд╣рд╛рд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛ред
рдореЗрд░реЗ рд▓рд┐рдП, client_secret
рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдирд╛ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ, рдФрд░ client_secret
рдореЗрдВ fetch_token
рдФрд░ request
рдкрд░ рдЬрд╛рдиреЗ рдкрд░ OAuth2Session рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВ
рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо/рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ client_id/client_secret рдХреЗ рдкрд░реАрдХреНрд╖рдг рдЪрд░реЛрдВ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП oauthlib (#593) рдХреЗ рд▓рд┐рдП рдкреАрдЖрд░ рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓ рджрд┐рдпрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рджреЛрдиреЛрдВ рдХреЗ рдмреАрдЪ рднреНрд░рдо рдХреА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЕрдиреБрд░реЛрдз-oauthlib рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди: https://github.com/requests/requests-oauthlib/compare/master...jvanasco:fix-oauthlib_client_id
рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдареЛрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдлрд┐рдХреНрд╕ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ:
username
рдФрд░ password
рдХреЗрд╡рд▓ LegacyApplicationClient
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╕рд╣реА?)ред рдЪреЗрдХ рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╕реЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпреВрдЬрд░рдиреЗрдо/рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ kwargs dict рдореЗрдВ рдорд┐рд▓рд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА/рдСрде рд╣реЗрдбрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд╣реЛрдВред рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред
рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ client_secret
рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛? рдореИрдВ рдХрд┐рд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╕реЛрдЪ рд╕рдХрддрд╛, рд▓реЗрдХрд┐рди рдХрдИ oAuth рдкреНрд░рд╡рд╛рд╣ рд╣реИрдВред
рддреЛ рдЕрдиреБрд░реЛрдз-oauthlib рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ:
| include_client_id
| auth
| рд╡реНрдпрд╡рд╣рд╛рд░ |
| ------------------- | --------------- | -------- |
| рдХреЛрдИ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) | рдХреЛрдИ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) | client_id
рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВред рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рди рднреЗрдЬреЗрдВред рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ RFC рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИред |
| рдХреЛрдИ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) | рд╡рд░реНрддрдорд╛рди | рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред oauthlib рдХреЗ prepare_request_body
рд╕рд╛рде include_client_id=False
|
| рдЭреВрдард╛ | рд╡рд░реНрддрдорд╛рди | рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред oauthlib рдХреЗ prepare_request_body
рд╕рд╛рде include_client_id=False
|
| рд╕рдЪ | рд╡рд░реНрддрдорд╛рди | рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред oauthlib рдХреЗ prepare_request_body
рд╕рд╛рде include_client_id=True
|
| рд╕рдЪ | рдХреЛрдИ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) | client_id
рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВред oauthlib рдХреЗ prepare_request_body
рд╕рд╛рде include_client_id=True
|
| рдЭреВрдард╛ | рдХреЛрдИ рдирд╣реАрдВ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) | client_id
рд╕рд╛рде рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдВред oauthlib рдХреЗ prepare_request_body
рд╕рд╛рде include_client_id=False
|
рдпрд╛ рдЕрдиреНрдпрдерд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ:
@jvanasco : oauthlib рдФрд░ рдЕрдиреБрд░реЛрдз-oauthlib рдкрдХреНрд╖ рдкрд░ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред
рдЖрдкрдХреЗ рдмрд╛рд░реЗ рдореЗрдВ 3. рдкреНрд░рд╢реНрди:
рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ_рд╕реЗрдХреНрд░реЗрдЯ рдХреЗ рдмрд┐рдирд╛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ (рдпрд╛ рдЦрд╛рд▓реА, рдЬреЛ рдЖрд░рдПрдлрд╕реА рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд░реАрдм рд╣реИ); рдЗрд╕рд▓рд┐рдП рдЕрдЬрдЧрд░ рдПрдкреАрдЖрдИ рдХреЛ "рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ" рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ-рдорд╛рдорд▓рд╛ рдЕрдХреНрд╕рд░ рдореВрд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдЧреБрдкреНрдд рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрдиреЗ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕реБрд░рдХреНрд╖рд╛ рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП, рдпрд╛ рддреЛ рдЖрдк client_id
рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ client_secret
(рдпрд╛ рдЦрд╛рд▓реА client_secret
рдЬреЛ RFC рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рд╣реИрдВ); рдпрд╛ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдФрд░ PKCE RFC рднреА рдЙрдкрд▓рдмреНрдз рд╣реИ (рджреЗрдЦреЗрдВ https://oauth.net/2/pkce/ )ред рд▓реЗрдХрд┐рди рдмрд╛рдж рд╡рд╛рд▓реЗ рдХреЛ рдЕрднреА рддрдХ oauthlib
рдкрдХреНрд╖ рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рд╣рдо client_id
рдмрд┐рдирд╛ client_secret
client_id
рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХреЗрдВред рдЗрддрдиреЗ рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рдкреВрдЫрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рдЗрд╕ рдпреБрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рд╣реА рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╕рдВрднрд╡ рд╣реИрдВ (рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЯреВрдЯреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЬрд┐рдиреНрд╣реЗрдВ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
@JonathanHuot рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди client_secret
рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬрдиреЗ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕реЗ рдЗрд╕ рддрд░реНрдХ рдореЗрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ https://github.com/oauthlib/oauthlib/blob/master/oauthlib/oauth2/rfc6749/parameters.py#L90 -L125 - рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд▓рд╛рдЗрди 122
рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдирд╛ рдЙрд╕ рджрд┐рдирдЪрд░реНрдпрд╛ рдХреЗ рдареАрдХ рдмрд╛рдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдЬреЛрдбрд╝рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
if ('client_secret' in kwargs) and ('client_secret' not in params):
if kwargs['client_secret'] == '':
params.append((unicode_type('client_secret'), kwargs['client_secret']))
рд╡рд╣ client_secret
рд▓рд┐рдП рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рднреЗрдЬреЗрдЧрд╛ рдЬрдм рд░рд╣рд╕реНрдп рдПрдХ рдЦрд╛рд▓реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ, рд▓реЗрдХрд┐рди client_secret
рдирд╣реАрдВ рднреЗрдЬреЗрдВ рдпрджрд┐ рдорд╛рди None
ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рд▓рд╛рдпрдХ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд░ рдЖрд░рдПрдлрд╕реА рджреЛ рдкреНрд░рдХрд╛рд░реЛрдВ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ ... рдРрд╕реЗ рдХрдИ рдЯреВрдЯреЗ рд╣реБрдП рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдЬреЛ рдХреЗрд╡рд▓ рдПрдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдореВрд▓ рд╕рдорд╕реНрдпрд╛ oauthlib рдореЗрдВ рдареАрдХ рдХреА рдЧрдИ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ https://github.com/requests/requests-oauthlib/pull/331 рддрдп рд╣реЛрдиреЗ рддрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рд╡рд╣реАрдВ рд╣реИред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднрд┐рдиреНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдХрднреА рднреА
client_id
рдХреЛ рдХреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,рдХреНрдпрд╛ рд╣рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ
DeprecationWarning
рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐client_id
рдПрдХ kwarg рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?