base
oauthlib.oauth2.rfc6749 ~~~~~~~~~~~~~~~~~~~~~~~
This module is an implementation of various logic needed for consuming OAuth 2.0 RFC6749.
Client
Base OAuth2 client responsible for access token management.
This class also acts as a generic interface providing methods common to all client types such as prepare_authorization_request
and prepare_token_revocation_request
. The prepare_x_request
methods are the recommended way of interacting with clients (as opposed to the abstract prepare uri/body/etc methods). They are recommended over the older set because they are easier to use (more consistent) and add a few additional security checks, such as HTTPS and state checking.
Some of these methods require further implementation only provided by the specific purpose clients such as :py:class:oauthlib.oauth2.MobileApplicationClient
and thus you should always seek to use the client class matching the OAuth workflow you need. For Python, this is usually :py:class:oauthlib.oauth2.WebApplicationClient
.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 |
|
token_types
property
Supported token types and their respective methods
Additional tokens can be supported by extending this dictionary.
The Bearer token spec is stable and safe to use.
The MAC token spec is not yet stable and support for MAC tokens is experimental and currently matching version 00 of the spec.
__init__(client_id, default_token_placement=AUTH_HEADER, token_type='Bearer', access_token=None, refresh_token=None, mac_key=None, mac_algorithm=None, token=None, scope=None, state=None, redirect_url=None, state_generator=generate_token, code_verifier=None, code_challenge=None, code_challenge_method=None, **kwargs)
Initialize a client with commonly used attributes.
:param client_id: Client identifier given by the OAuth provider upon registration.
:param default_token_placement: Tokens can be supplied in the Authorization header (default), the URL query component (query
) or the request body (body
).
:param token_type: OAuth 2 token type. Defaults to Bearer. Change this if you specify the access_token
parameter and know it is of a different token type, such as a MAC, JWT or SAML token. Can also be supplied as token_type
inside the token
dict parameter.
:param access_token: An access token (string) used to authenticate requests to protected resources. Can also be supplied inside the token
dict parameter.
:param refresh_token: A refresh token (string) used to refresh expired tokens. Can also be supplied inside the token
dict parameter.
:param mac_key: Encryption key used with MAC tokens.
:param mac_algorithm: Hashing algorithm for MAC tokens.
:param token: A dict of token attributes such as access_token
, token_type
and expires_at
.
:param scope: A list of default scopes to request authorization for.
:param state: A CSRF protection string used during authorization.
:param redirect_url: The redirection endpoint on the client side to which the user returns after authorization.
:param state_generator: A no argument state generation callable. Defaults to :py:meth:oauthlib.common.generate_token
.
:param code_verifier: PKCE parameter. A cryptographically random string that is used to correlate the authorization request to the token request.
:param code_challenge: PKCE parameter. A challenge derived from the code verifier that is sent in the authorization request, to be verified against later.
:param code_challenge_method: PKCE parameter. A method that was used to derive code challenge. Defaults to "plain" if not present in the request.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
|
add_token(uri, http_method='GET', body=None, headers=None, token_placement=None, **kwargs)
Add token to the request uri, body or authorization header.
The access token type provides the client with the information required to successfully utilize the access token to make a protected resource request (along with type-specific attributes). The client MUST NOT use an access token if it does not understand the token type.
For example, the "bearer" token type defined in [I-D.ietf-oauth-v2-bearer
_] is utilized by simply including the access token string in the request:
.. code-block:: http
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: Bearer mF_9.B5f-4.1JqM
while the "mac" token type defined in [I-D.ietf-oauth-v2-http-mac
_] is utilized by issuing a MAC key together with the access token which is used to sign certain components of the HTTP requests:
.. code-block:: http
GET /resource/1 HTTP/1.1
Host: example.com
Authorization: MAC id="h480djs93hd8",
nonce="274312:dj83hs9s",
mac="kDZvddkndxvhGRXZhvuDjEWhGeE="
.. I-D.ietf-oauth-v2-bearer
: https://tools.ietf.org/html/rfc6749#section-12.2 .. I-D.ietf-oauth-v2-http-mac
: https://tools.ietf.org/html/rfc6749#section-12.2
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 |
|
create_code_challenge(code_verifier, code_challenge_method=None)
Create PKCE code_challenge derived from the code_verifier. See RFC7636 Section 4.2
_
:param code_verifier: REQUIRED. The code_verifier generated from create_code_verifier()
. :param code_challenge_method: OPTIONAL. The method used to derive the code_challenge. Acceptable values include S256
. DEFAULT is plain
.
The client then creates a code challenge derived from the code
verifier by using one of the following transformations on the code
verifier::
plain
code_challenge = code_verifier
S256
code_challenge = BASE64URL-ENCODE(SHA256(ASCII(code_verifier)))
If the client is capable of using `S256`, it MUST use `S256`, as
`S256` is Mandatory To Implement (MTI) on the server. Clients are
permitted to use `plain` only if they cannot support `S256` for some
technical reason and know via out-of-band configuration that the
server supports `plain`.
The plain transformation is for compatibility with existing
deployments and for constrained environments that can't use the S256 transformation.
.. _RFC7636 Section 4.2
: https://tools.ietf.org/html/rfc7636#section-4.2
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 |
|
create_code_verifier(length)
Create PKCE code_verifier used in computing code_challenge. See RFC7636 Section 4.1
_
:param length: REQUIRED. The length of the code_verifier.
The client first creates a code verifier, "code_verifier", for each OAuth 2.0 [RFC6749] Authorization Request, in the following manner:
.. code-block:: text
code_verifier = high-entropy cryptographic random STRING using the
unreserved characters [A-Z] / [a-z] / [0-9] / "-" / "." / "_" / "~"
from Section 2.3 of [RFC3986], with a minimum length of 43 characters
and a maximum length of 128 characters.
.. _RFC7636 Section 4.1
: https://tools.ietf.org/html/rfc7636#section-4.1
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 |
|
parse_request_body_response(body, scope=None, **kwargs)
Parse the JSON response body.
If the access token request is valid and authorized, the authorization server issues an access token as described in Section 5.1
. A refresh token SHOULD NOT be included. If the request failed client authentication or is invalid, the authorization server returns an error response as described in Section 5.2
.
:param body: The response body from the token request. :param scope: Scopes originally requested. If none is provided, the ones provided in the constructor are used. :return: Dictionary of token parameters. :raises: Warning if scope has changed. :py:class:oauthlib.oauth2.errors.OAuth2Error
if response is invalid.
These response are json encoded and could easily be parsed without the assistance of OAuthLib. However, there are a few subtle issues to be aware of regarding the response which are helpfully addressed through the raising of various errors.
A successful response should always contain
access_token The access token issued by the authorization server. Often a random string.
token_type The type of the token issued as described in Section 7.1
_. Commonly Bearer
.
While it is not mandated it is recommended that the provider include
expires_in The lifetime in seconds of the access token. For example, the value "3600" denotes that the access token will expire in one hour from the time the response was generated. If omitted, the authorization server SHOULD provide the expiration time via other means or document the default value.
scope Providers may supply this in all responses but are required to only if it has changed since the authorization request.
.. Section 5.1
: https://tools.ietf.org/html/rfc6749#section-5.1 .. Section 5.2
: https://tools.ietf.org/html/rfc6749#section-5.2 .. _Section 7.1
: https://tools.ietf.org/html/rfc6749#section-7.1
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 |
|
parse_request_uri_response(*args, **kwargs)
Abstract method used to parse redirection responses.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
164 165 166 |
|
populate_code_attributes(response)
Add attributes from an auth code response to self.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
572 573 574 575 576 |
|
populate_token_attributes(response)
Add attributes from a token exchange response to self.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 |
|
prepare_authorization_request(authorization_url, state=None, redirect_url=None, scope=None, **kwargs)
Prepare the authorization request.
This is the first step in many OAuth flows in which the user is redirected to a certain authorization URL. This method adds required parameters to the authorization URL.
:param authorization_url: Provider authorization endpoint URL. :param state: CSRF protection string. Will be automatically created if not provided. The generated state is available via the state
attribute. Clients should verify that the state is unchanged and present in the authorization response. This verification is done automatically if using the authorization_response
parameter with prepare_token_request
. :param redirect_url: Redirect URL to which the user will be returned after authorization. Must be provided unless previously setup with the provider. If provided then it must also be provided in the token request. :param scope: List of scopes to request. Must be equal to or a subset of the scopes granted when obtaining the refresh token. If none is provided, the ones provided in the constructor are used. :param kwargs: Additional parameters to included in the request. :returns: The prepared request tuple with (url, headers, body).
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 |
|
prepare_refresh_body(body='', refresh_token=None, scope=None, **kwargs)
Prepare an access token request, using a refresh token.
If the authorization server issued a refresh token to the client, the client makes a refresh request to the token endpoint by adding the following parameters using the application/x-www-form-urlencoded
format in the HTTP request entity-body:
:param refresh_token: REQUIRED. The refresh token issued to the client. :param scope: OPTIONAL. The scope of the access request as described by Section 3.3. The requested scope MUST NOT include any scope not originally granted by the resource owner, and if omitted is treated as equal to the scope originally granted by the resource owner. Note that if none is provided, the ones provided in the constructor are used if any.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 |
|
prepare_refresh_token_request(token_url, refresh_token=None, body='', scope=None, **kwargs)
Prepare an access token refresh request.
Expired access tokens can be replaced by new access tokens without going through the OAuth dance if the client obtained a refresh token. This refresh token and authentication credentials can be used to obtain a new access token, and possibly a new refresh token.
:param token_url: Provider token refresh endpoint URL. :param refresh_token: Refresh token string. :param body: Existing request body (URL encoded string) to embed parameters into. This may contain extra parameters. Default ''. :param scope: List of scopes to request. Must be equal to or a subset of the scopes granted when obtaining the refresh token. If none is provided, the ones provided in the constructor are used. :param kwargs: Additional parameters to included in the request. :returns: The prepared request tuple with (url, headers, body).
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 |
|
prepare_request_body(*args, **kwargs)
Abstract method used to create request bodies.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
160 161 162 |
|
prepare_request_uri(*args, **kwargs)
Abstract method used to create request URIs.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
156 157 158 |
|
prepare_token_request(token_url, authorization_response=None, redirect_url=None, state=None, body='', **kwargs)
Prepare a token creation request.
Note that these requests usually require client authentication, either by including client_id or a set of provider specific authentication credentials.
:param token_url: Provider token creation endpoint URL. :param authorization_response: The full redirection URL string, i.e. the location to which the user was redirected after successful authorization. Used to mine credentials needed to obtain a token in this step, such as authorization code. :param redirect_url: The redirect_url supplied with the authorization request (if there was one). :param state: :param body: Existing request body (URL encoded string) to embed parameters into. This may contain extra parameters. Default ''. :param kwargs: Additional parameters to included in the request. :returns: The prepared request tuple with (url, headers, body).
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 |
|
prepare_token_revocation_request(revocation_url, token, token_type_hint='access_token', body='', callback=None, **kwargs)
Prepare a token revocation request.
:param revocation_url: Provider token revocation endpoint URL. :param token: The access or refresh token to be revoked (string). :param token_type_hint: "access_token"
(default) or "refresh_token"
. This is optional and if you wish to not pass it you must provide token_type_hint=None
. :param body: :param callback: A jsonp callback such as package.callback
to be invoked upon receiving the response. Not that it should not include a () suffix. :param kwargs: Additional parameters to included in the request. :returns: The prepared request tuple with (url, headers, body).
Note that JSONP request may use GET requests as the parameters will be added to the request URL query as opposed to the request body.
An example of a revocation request
.. code-block:: http
POST /revoke HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=45ghiukldjahdnhzdauz&token_type_hint=refresh_token
An example of a jsonp revocation request
.. code-block:: http
GET /revoke?token=agabcdefddddafdd&callback=package.myCallback HTTP/1.1
Host: server.example.com
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
and an error response
.. code-block:: javascript
package.myCallback({"error":"unsupported_token_type"});
Note that these requests usually require client credentials, client_id in the case for public clients and provider specific authentication credentials for confidential clients.
Source code in server/vendor/oauthlib/oauth2/rfc6749/clients/base.py
323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 |
|