Oauthlib: рдХреНрд▓рд╛рдЗрдВрдЯ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдирд╣реАрдВ рднреЗрдЬрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рд╕рд┐рддре░ 2018  ┬╖  26рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: oauthlib/oauthlib

рдЬрдм 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.

Bug Discussion OAuth2-Client

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдпрд╣ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рдЖрдк рдХрд┐рд╕реА рднрд┐рдиреНрди рдорд╛рди рдХреЗ рд╕рд╛рде рдХрднреА рднреА client_id рдХреЛ рдХреИрд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,

рдХреНрдпрд╛ рд╣рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдПрдХ DeprecationWarning рд▓реЙрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрджрд┐ client_id рдПрдХ kwarg рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛?

рд╕рднреА 26 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореЗрд░реА рдкрд╣рд▓реА рд╕реЛрдЪ 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 рдЖрд╣реНрд╡рд╛рди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдЖрд░рдПрдлрд╕реА рд╕реЗ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реИ рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдЙрддреНрддрд░ рдЬрд╛рдирддрд╛ рд╣реИ:

  1. рдХреНрдпрд╛ username + password рдХрднреА рднреА request.body рдореЗрдВ рдПрдХ рдкрд░рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
  2. рдпрджрд┐ username + password HTTP рдмреЗрд╕рд┐рдХ рдСрдереЗрдВрдЯ рд╣реЗрдбрд░ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдмреЙрдбреА рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
  3. рдХреНрдпрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде username + password рдмреЙрдбреА рдкреИрд░рд╛рдореНрд╕ рдФрд░ HTTPBasicAuth рд╣реЗрдбрд░ рджреЛрдиреЛрдВ рд╣реЛрдирд╛ рд╕рдВрднрд╡ рд╣реИ?

рдЗрд╕рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

  1. username рдФрд░ password рд╣рд░ рдмрд╛рд░ рдЕрдиреБрд░реЛрдз рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рдореМрдЬреВрдж рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдкрд╛рд╕рд╡рд░реНрдб рдЕрдиреБрджрд╛рди рдЙрд░реНрдл тАЛтАЛрд╡рд┐рд░рд╛рд╕рдд рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреНрдп рдЕрдиреБрджрд╛рдиреЛрдВ (рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд, рдХреЛрдб, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
  2. рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЗ рд▓рд┐рдП HTTP рдмреЗрд╕рд┐рдХ рдСрде рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ (рдЧреЛрдкрдиреАрдп рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдпрд╛рдиреА client_secret )ред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХрднреА рднреА HTTP рдмреЗрд╕рд┐рдХ рдСрдереЗрдВрдЯрд┐рдХреЗрд╢рди рдореЗрдВ
  3. рд╣рд╛рдВ

рдзрдиреНрдпрд╡рд╛рджред рдмрд╕ рджреЛ рдмрд╛рддреЗрдВ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдФрд░ рдХреГрдкрдпрд╛ рдмреЗрдЭрд┐рдЭрдХ рдореБрдЭрд╕реЗ рдмрд╛рдд рдХрд░реЗрдВ рдЬреИрд╕реЗ рдореИрдВ рдкрд╛рдБрдЪ рд╕рд╛рд▓ рдХрд╛ рд╣реВрдБред рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореБрдЭреЗ рдпрд╣ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд╕рд╣реА рдорд┐рд▓реЗ:

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрджрд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рддрдХ рдЙрдиреНрд╣реЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЙрдкрд╕реНрдерд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣реИ рдирд╛?

  1. рдпрджрд┐ рдПрдЪрдЯреАрдкреА рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗрд╡рд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдкреНрд░рдорд╛рдг-рдкрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╣реИ, рддреЛ рдореМрдЬреВрджрд╛ рдЕрдиреБрд░реЛрдз-рдУрдерд▓рд┐рдм рдореЗрдВ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЙрдореНрдмреЛ рд╕реЗ рдореВрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрди рдЫреЛрдЯреЗ рд╡рд┐рд╡рд░рдгреЛрдВ рдкрд░ рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдФрд░ рдЬреБрдиреВрдиреА рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдорд╛ рдХрд░реЗрдВред рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдЬреЗ рдХреЛ рд╕рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдорд┐рд▓реЗ рдФрд░ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦ рд╕рдХреЗрдВ рдЬреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдкреНрд░рддрд┐рдЧрдорди рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред

@jvanasco , рдореИрдВ OAuth2 RFC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ requests-oauthlib рдФрд░ flask-oauthlib рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рд╣реЛрддреЗ рд╣реИрдВред

  1. рд╣рд╛рдВ

рд╕рд╣реАред

  1. рд╣рд╛рдБ, AFAIU рдореЗрдВ рдпрд╣ рдмреНрд▓реЙрдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП https://github.com/requests/requests-oauthlib/blob/master/requests_oauthlib/oauth2_session.py#L207 -L211.

рдпрд╣ рдореЗрд░реА рд╕рдордЭ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреНрд╖реЗрддреНрд░ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛; рдпрд╛рдиреА рдЕрдиреБрд░реЛрдз-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 рдХреА рдЪрд░реНрдЪрд╛ред

рдорд╣рд╛рди! рдмрд╣реБрдд - рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рджред рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдкреБрд╖реНрдЯрд┐ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЕрдм рдЕрдиреБрд░реЛрдз рд╕рд╛рдордЧреНрд░реА рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореЗрд░реЗ рдкрд╛рд╕ рдореБрдЦреНрдп рдЕрдиреБрд░реЛрдз рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ рдХреБрдЫ рд╣рдж рддрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд░рдЦрд░рдЦрд╛рд╡ рдкреАрдЖрд░ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдореЗрдВ рдХреНрдпрд╛ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред

  1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрджрд╛рди рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рд╡реЗ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рдЙрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рд╛рдВ, рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдП: рдХреЗрд╡рд▓ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрджрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рд▓реЗрдХрд┐рди рджреВрд╕рд░реЗ рднрд╛рдЧ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпреБрдХреНрддрд┐ рдХрд╣рддреА рд╣реИ:

рдЕрдиреБрд░реЛрдз-рдирд┐рдХрд╛рдп рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рд╕рд╣рд┐рдд
рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рд╣реИ
рдФрд░ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде рдЧреНрд░рд╛рд╣рдХреЛрдВ рддрдХ рд╕реАрдорд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
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 рд╕рдВрджрд░реНрдн рдореЗрдВ, рдореИрдВ рдпрд╣реА рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ:

  1. username рдФрд░ password рдХреЗрд╡рд▓ рдмреЙрдбреА рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗ (HTTP рдмреЗрд╕рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ)ред рдпрджрд┐ рдЧреИрд░-рдЕрдиреБрдкрд╛рд▓рдХ рд╕рд░реНрд╡рд░ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХрд░реНрддрд╛ auth рдпрд╛ headers рддрд░реНрдХ рдХреЛ fetch_token() рд╕рдмрдорд┐рдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред

  2. рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ 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

рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдХрдареЛрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрдб рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ рдЬреЛ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдлрд┐рдХреНрд╕ рдХреБрдЫ рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ:

  1. username рдФрд░ password рдХреЗрд╡рд▓ LegacyApplicationClient рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╣реЛрддреА рд╣реИ - рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП (рд╕рд╣реА?)ред рдЪреЗрдХ рдХреЗ рдиреАрдЪреЗ рдПрдХ рд╕реЗрдХреНрд╢рди рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдпреВрдЬрд░рдиреЗрдо/рдкрд╛рд╕рд╡рд░реНрдб рдХреЛ kwargs dict рдореЗрдВ рдорд┐рд▓рд╛ рджреЗрддрд╛ рд╣реИред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдЧреНрд░рд╛рд╣рдХ рдЗрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рдкрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

  2. рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА/рдСрде рд╣реЗрдбрд░ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ рддрд╛рдХрд┐ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реЛ рд╕рдХреЗ рдХрд┐ рд╕рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдСрде рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рд╣реЛрдВред рдпрджрд┐ рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреЛ рдмрд╛рдзреНрдп рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИред

  3. рдкреНрд░рд╢реНрди: рдХреНрдпрд╛ рдРрд╕реА рдХреЛрдИ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрд╣рд╛рдВ 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 |

рдпрд╛ рдЕрдиреНрдпрдерд╛ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ:

  • рдПрдХ рдкреНрд░рд╛рдорд╛рдгрд┐рдХ рд╡рд╕реНрддреБ рдмрдирд╛рдПрдБ

    • рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рди рднреЗрдЬреЗрдВ:

    • (include_client_id=рдХреЛрдИ рдирд╣реАрдВ, рдкреНрд░рдорд╛рдгрди=рдХреЛрдИ рдирд╣реАрдВ)

    • (include_client_id=false, auth=рдХреЛрдИ рдирд╣реАрдВ)

    • рд╢рд░реАрд░ рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдИрдбреА рднреЗрдЬреЗрдВ:

    • (include_client_id=True, auth=рдХреЛрдИ рдирд╣реАрдВ)

  • рдПрдХ рд╕реНрдкрд╖реНрдЯ рдСрде рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

    • рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдХреЛ рдореБрдЦреНрдп рднрд╛рдЧ рдореЗрдВ рди рднреЗрдЬреЗрдВ:

    • (include_client_id=рдХреЛрдИ рдирд╣реАрдВ, auth=authObject)

    • (include_client_id=false, auth=authObject)

    • рдХреНрд▓рд╛рдЗрдВрдЯ_рдЖрдИрдбреА рдХреЛ рд╢рд░реАрд░ рдореЗрдВ рднреЗрдЬреЗрдВ:

    • (include_client_id=True, auth=authObject)

@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 рддрдп рд╣реЛрдиреЗ рддрдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрднреА рднреА рд╡рд╣реАрдВ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

potiuk picture potiuk  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

polamayster picture polamayster  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JonathanHuot picture JonathanHuot  ┬╖  15рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

JonathanHuot picture JonathanHuot  ┬╖  33рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ib-lundgren picture ib-lundgren  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ