Oauthlib: Client_secret рдФрд░ code_verifier (PKCE) рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП

рдХреЛ рдирд┐рд░реНрдорд┐рдд 19 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  19рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: oauthlib/oauthlib

рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬреЗ рдЬрд╛рдиреЗ рдкрд░ client_secret рдФрд░ code_verifier рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ

рд╣реЗрдбрд░ рдпрд╛ рдмреЙрдбреА рдореЗрдВ рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП Request.client_secret рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ Request.code_verifier рдХреЗрд╡рд▓ рдмреЙрдбреА рдореЗрдВ рдЪреЗрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдирд╣реАрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╣реИред
рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрд╛рдВрдЪ рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░ POST рдФрд░ рдбреЗрдЯрд╛ HTTPS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ред

рдЬрдм client_secret рдпрд╛ code_verifier рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ рддреЛ рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

Bug Contributor Friendly OAuth2-Provider

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

рд╣рд╛рдп @polamayster , рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:

OAuth2.0 RFC рдХрд╛ рдЕрдиреБрднрд╛рдЧ :

https://tools.ietf.org/html/rfc6749#section -2.3.1

2.3.1.  Client Password
   Clients in possession of a client password
   MAY use the HTTP Basic authentication scheme (..) 

   Alternatively, the authorization server
   MAY support including the client credentials in the request-body (..)

   The parameters can only be transmitted in the request-body and
   MUST NOT be included in the request URI.

рдкреАрдХреЗрд╕реАрдИ рдЖрд░рдПрдлрд╕реА рдХреА рдзрд╛рд░рд╛:

https://tools.ietf.org/html/rfc7636#section -4.5

4.5.  Client Sends the Authorization Code and the Code Verifier to the
      Token Endpoint
    In addition to the parameters defined in the OAuth 2.0 Access
    Token Request (Section 4.1.3 of [RFC6749]), it sends the following parameter:

   code_verifier
      REQUIRED.  Code verifier

https://tools.ietf.org/html/rfc6749#section -4.1.3


4.1.3.  Access Token Request

   The client makes a request to the token endpoint by sending the
   following parameters (..) in the HTTP request entity-body:

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдкрд░ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

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

рд╣рд╛рдп @polamayster , рдЖрдк рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВред

рдореИрдВ рдЖрд░рдПрдлрд╕реА рдХреЗ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╣реИ:

OAuth2.0 RFC рдХрд╛ рдЕрдиреБрднрд╛рдЧ :

https://tools.ietf.org/html/rfc6749#section -2.3.1

2.3.1.  Client Password
   Clients in possession of a client password
   MAY use the HTTP Basic authentication scheme (..) 

   Alternatively, the authorization server
   MAY support including the client credentials in the request-body (..)

   The parameters can only be transmitted in the request-body and
   MUST NOT be included in the request URI.

рдкреАрдХреЗрд╕реАрдИ рдЖрд░рдПрдлрд╕реА рдХреА рдзрд╛рд░рд╛:

https://tools.ietf.org/html/rfc7636#section -4.5

4.5.  Client Sends the Authorization Code and the Code Verifier to the
      Token Endpoint
    In addition to the parameters defined in the OAuth 2.0 Access
    Token Request (Section 4.1.3 of [RFC6749]), it sends the following parameter:

   code_verifier
      REQUIRED.  Code verifier

https://tools.ietf.org/html/rfc6749#section -4.1.3


4.1.3.  Access Token Request

   The client makes a request to the token endpoint by sending the
   following parameters (..) in the HTTP request entity-body:

рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рдкрд░ рдХреЛрдИ рд╕рдВрджреЗрд╣ рдирд╣реАрдВ рд╣реИред рдХрд┐рд╕реА рднреА рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ!

рдореБрдЭреЗ рдЗрд╕реЗ рдЖрдЧреЗ рдмрдврд╝рд╛рдиреЗ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реЛрдЧреАред рдЬрд▓реНрдж рд╣реА рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗред

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

рдореЗрд░реА рд╕рдордЭ рд╕реЗ oauthlib.common.Request рдХрдХреНрд╖рд╛ рдореЗрдВ __getattr__ рд╡рд┐рдзрд┐ рдФрд░ _params рд╢рдмреНрджрдХреЛрд╢ (рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмреЙрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдФрд░ рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рдЬреЛ client_secret рддрдХ рдкрд╣реБрдВрдЪрдиреЗ/рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ code_verifier рдХреЛ рдХреЗрд╡рд▓ рдмреЙрдбреА рдФрд░/рдпрд╛ рд╣реЗрдбрд░ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛)

рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдБ, рдореИрдВ рдЖрдЬ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдирд╕рдВрдкрд░реНрдХ рдкреНрд░рд╕реНрддреБрдд рдХрд░реВрдБрдЧрд╛

рд╢рдирд┐рд╡рд╛рд░, рдЕрдкреНрд░реИрд▓ 20, 2019, рджреЛрдкрд╣рд░ 12:38 рдмрдЬреЗ рдмреЛрд╣рджрд╛рди < рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореЗрд░реА рд╕рдордЭ рд╕реЗ oauthlib.common.Request рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ __getattr__ рд╣реИ
рд╡рд┐рдзрд┐ рдФрд░ _params рд╢рдмреНрджрдХреЛрд╢ (рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмреЙрдбреА рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛
рдкреИрд░рд╛рдореАрдЯрд░) рдФрд░ рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ_рд╕реЗрдХреНрд░реЗрдЯ рдпрд╛ . рддрдХ рдкрд╣реБрдВрдЪрдиреЗ/рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ
code_verifier рдХреЛ рдХреЗрд╡рд▓ рд╢рд░реАрд░ рдФрд░/рдпрд╛ рд╢реАрд░реНрд╖рд▓реЗрдЦреЛрдВ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рд╣реЛ рд░рд╣рд╛ рд╣реИ
рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рд╕рдВрдкрддреНрддрд┐ рд╕рдордЭ рдореЗрдВ рдЖрдПрдЧреА)

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рдереАред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/oauthlib/oauthlib/issues/666#issuecomment-485157051 ,
рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
https://github.com/notifications/unsubscribe-auth/ABKEVQNFJUFGDB5X24JBOJDPRNWKBANCNFSM4HHD7NNQ
.

рдореЗрд░реА рд╕рдордЭ рд╕реЗ oauthlib.common.Request рдХрдХреНрд╖рд╛ рдореЗрдВ __getattr__ рд╡рд┐рдзрд┐ рдФрд░ _params рд╢рдмреНрджрдХреЛрд╢ (рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдФрд░ рдмреЙрдбреА рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛) рдФрд░ рдХреЛрдИ рднреА рдЕрдиреБрд░реЛрдз рдЬреЛ client_secret рддрдХ рдкрд╣реБрдВрдЪрдиреЗ/рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИ code_verifier рдХреЛ рдХреЗрд╡рд▓ рдмреЙрдбреА рдФрд░/рдпрд╛ рд╣реЗрдбрд░ рдореЗрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╢рд╛рдпрдж рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд▓реБрдХрдЕрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реЛрдиреЗ рд╕реЗ рдХреЛрдИ рдорддрд▓рдм рд╣реЛрдЧрд╛)

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

рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрдбрд╝рд╛ рд╣реИ рдФрд░ рдкреВрд░реЗ /token рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ URL рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рднреА рдпреЛрдЧреНрдп рд╣реИред рдЖрдИрдЖрдИрдЖрд░рд╕реА, рдХреЗ рдЕрдиреБрд╕рд╛рд░
HTTP рд╡рд┐рдирд┐рд░реНрджреЗрд╢, POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд░
рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реИрдВ
рд╡реИрдз рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдиреНрдп HTTP рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рд▓реЗрдХрд┐рди рдореБрдЭреЗ POST рд╡рди рдкрд░ рдкреВрд░рд╛ рдпрдХреАрди рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдпрд╣ рд╕рд╣реА рд╣реИ
рджрд┐рд╢рд╛ рдХреА рдУрд░ рдЬрд╛рдирд╛ рд╣реИ?

>

рд╕рднреА рдкреЛрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рд╣реИ рдЬреЛ рдЖрдХрд░реНрд╖рдХ рд╣реИ! рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ oauthlib рдХреЗ ResourceEndpoint рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдХрд┐ рдХреБрдЫ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрднреА рднреА URL рдореЗрдВ рдХреНрд╡реЗрд░реА рддрд░реНрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕рдХреЗ рдмрд╛рд╡рдЬреВрдж рдЗрд╕рдХреА рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ, рдпрд╣ рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ рдЕрднреА рднреА рд╕рдВрднрд╡ рд╣реИ)ред

рдХреНрдпрд╛ рдЖрдк рд╕рдВрд╕рд╛рдзрди рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд╕рд╛рде рдЕрдкрдиреА рдЪрд┐рдВрддрд╛рдУрдВ рдкрд░ рдереЛрдбрд╝рд╛ рдФрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

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

рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ POST рдореЗрдВ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдо рдЬреЛрдбрд╝рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛,
рдЬрд▓реНрджреА рд╕реЗ рд╕реНрд╡рдпрдВ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдорд┐рдХреНрд╕рд┐рди рдпрд╛ рдбреЗрдХреЛрд░реЗрдЯрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░, рдмрдврд╝ рдЬрд╛рдПрдЧрд╛
рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдХреЗ рд╕рд╛рде POST рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпрд╛рдВред

рдпрд╣рд╛рдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╛рдзрд╛рди рд╣реИред рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП ( AuthorizationEndpoint , IntrospectEndpoint , RevocationEndpoint ); рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐ POST рддреЛ рд╣рдо рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП рдЙрдирдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрдиреБрд░реЛрдз рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред ( TokenEndpoint , MetadataEndpoint ) рдХреЗ рд▓рд┐рдП рд╣рдо рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреАрдврд╝реА рдХреЗ рддрд░реАрдХреЛрдВ рдореЗрдВ рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдпрд╛ рд╣рдо рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП, рдЙрди рд╕рднреА рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреАрдврд╝реА рд╡рд┐рдзрд┐ рдХреЗ рдЕрдВрджрд░ рдЬрд╛рдБрдЪ рддрдВрддреНрд░ рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдпрд╣ рдПрдХ рдЕрдЪреНрдЫреЗ рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _request_ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред
рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ POST рдХреЗрд╡рд▓ TokenEndpoint , IntrospectEndpoint рдФрд░ RevocationEndpoint ред рдЕрдиреНрдп рд╣реИрдВ GET : AuthorizationEndpoint , MetadataEndpoint ред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЯрд┐рдкреНрдкрдгреА: рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдХреНрд╖реЗрддреНрд░реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ рдмрдирд╛рдП рд░рдЦрдирд╛) рдпрд╛ рдХреНрдпрд╛ рд╣рдореЗрдВ рд╕рднреА OAuth2 рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП (рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдИ рднреА рдХреНрд╡реЗрд░реА рдпреВрдЖрд░рдЖрдИ рдореЗрдВ рди рд╣реЛ, рд╣реИ рдирд╛?)

рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдореБрдЭреЗ рдХреНрд╡реЗрд░реА рдпреВрдЖрд░рдЖрдИ рдореЗрдВ рдХреЛрдИ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдХрд╛рд▓реА рд╕реВрдЪреА рдореЗрдВ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрдпрд╛ рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ рдирд╣реАрдВ рдерд╛
рдпрдХреАрди рд╣реИ рдХрд┐ рдЕрдЧрд░ рдореИрдВ рдХреБрдЫ рдореМрдЬреВрджрд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рддреЛрдбрд╝ рд░рд╣рд╛ рд╣реВрдВред рди рдХреЗрд╡рд▓ OAuth2 рд╣реИрдВ
рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред

>

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

рдареАрдХ рд╣реИ, рддреЛ рдореИрдВ рдЙрди рд╕рдЯреАрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рд╕рднреА рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдХреЛ рдЕрдХреНрд╖рдо рдХрд░ рджреВрдВрдЧрд╛ред рдФрд░
рд╣рдо http рд╡рд┐рдзрд┐ рдХреЛ POST рддрдХ рд╕реАрдорд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╕рд╣реА?

https://github.com/oauthlib/oauthlib/pull/667 . рдореЗрдВ рдлрд┐рдХреНрд╕реНрдб

рдЬрдмрдХрд┐ рдореИрдВ рдЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рддрд░реНрдХ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ, рдпрд╣ рдЙрди рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ client_secret рднреЗрдЬрддреЗ рд╣реИрдВред рдореБрдЭреЗ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрддрддрд╛ рдпрд╛ рдПрдХ рдкреНрд░рдореБрдЦ рд╕рдВрд╕реНрдХрд░рдг рдЯрдХреНрдХрд░ рдХреА рдЙрдореНрдореАрдж рд╣реЛрдЧреАред рдХреНрдпрд╛ рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЗрд░рд╛рджрд╛ рд╣реИ?

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╣рдо django-oauth-toolkit рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ username , password , client_secret , client_id рдФрд░ grant_type рдХреЛ рдХреНрд╡реЗрд░реА рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬ рд░рд╣реЗ рд╣реИрдВред рдкреИрд░рд╛рдореАрдЯрд░ред рдпрджрд┐ рд╡реЗ рд╕рдм рдХреБрдЫ POST рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рд┐рдЪ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдиреНрд╣реЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ unsupported_grant_type ред

POST рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХрд╛ рд╕рдорд░реНрдерди рд╡рд╛рдВрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рджреБрд╖реНрдкреНрд░рднрд╛рд╡ рд╣реИред рдореИрдВ рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рддреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ <3.1 . рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреВрдВрдЧрд╛
рд╕рд╛рде рд╣реА, рдХреГрдкрдпрд╛ рдпрдерд╛рд╢реАрдШреНрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдВрдмрдВрдзреА рдЪрд┐рдВрддрд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ (рдЧреБрдкреНрдд рд▓реЙрдЧ рдореЗрдВ, рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ, рдХрдИ рдЕрдирдкреЗрдХреНрд╖рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рджрд┐рдЦрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред

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

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

ggiill picture ggiill  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

ryarnyah picture ryarnyah  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

prudnikov picture prudnikov  ┬╖  11рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ