usso 0.28.27__tar.gz → 0.28.29__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {usso-0.28.27/src/usso.egg-info → usso-0.28.29}/PKG-INFO +2 -2
- {usso-0.28.27 → usso-0.28.29}/pyproject.toml +2 -2
- {usso-0.28.27 → usso-0.28.29}/src/usso/client.py +26 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/config.py +4 -1
- {usso-0.28.27 → usso-0.28.29}/src/usso/integrations/fastapi/dependency.py +6 -3
- {usso-0.28.27 → usso-0.28.29/src/usso.egg-info}/PKG-INFO +2 -2
- {usso-0.28.27 → usso-0.28.29}/src/usso.egg-info/requires.txt +1 -1
- {usso-0.28.27 → usso-0.28.29}/LICENSE.txt +0 -0
- {usso-0.28.27 → usso-0.28.29}/MANIFEST.in +0 -0
- {usso-0.28.27 → usso-0.28.29}/README.md +0 -0
- {usso-0.28.27 → usso-0.28.29}/pytest.ini +0 -0
- {usso-0.28.27 → usso-0.28.29}/setup.cfg +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/__init__.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/api_key.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/authorization.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/exceptions.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/integrations/django/__init__.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/integrations/django/middleware.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/integrations/fastapi/__init__.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/integrations/fastapi/handler.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/session/__init__.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/session/async_session.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/session/base_session.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/session/session.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/user.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/utils/__init__.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso/utils/string_utils.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso.egg-info/SOURCES.txt +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso.egg-info/dependency_links.txt +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso.egg-info/entry_points.txt +0 -0
- {usso-0.28.27 → usso-0.28.29}/src/usso.egg-info/top_level.txt +0 -0
- {usso-0.28.27 → usso-0.28.29}/tests/test_authorization.py +0 -0
- {usso-0.28.27 → usso-0.28.29}/tests/test_fastapi.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: usso
|
3
|
-
Version: 0.28.
|
3
|
+
Version: 0.28.29
|
4
4
|
Summary: A plug-and-play client for integrating universal single sign-on (SSO) with Python frameworks, enabling secure and seamless authentication across microservices.
|
5
5
|
Author-email: Mahdi Kiani <mahdikiany@gmail.com>
|
6
6
|
Maintainer-email: Mahdi Kiani <mahdikiany@gmail.com>
|
@@ -28,7 +28,7 @@ Requires-Dist: cachetools
|
|
28
28
|
Requires-Dist: singleton_package
|
29
29
|
Requires-Dist: json-advanced
|
30
30
|
Requires-Dist: httpx
|
31
|
-
Requires-Dist: usso-jwt>=0.2.
|
31
|
+
Requires-Dist: usso-jwt>=0.2.6
|
32
32
|
Provides-Extra: fastapi
|
33
33
|
Requires-Dist: fastapi>=0.65.0; extra == "fastapi"
|
34
34
|
Requires-Dist: uvicorn[standard]>=0.13.0; extra == "fastapi"
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "usso"
|
7
|
-
version = "0.28.
|
7
|
+
version = "0.28.29"
|
8
8
|
description = "A plug-and-play client for integrating universal single sign-on (SSO) with Python frameworks, enabling secure and seamless authentication across microservices."
|
9
9
|
readme = "README.md"
|
10
10
|
requires-python = ">=3.9"
|
@@ -30,7 +30,7 @@ dependencies = [
|
|
30
30
|
"singleton_package",
|
31
31
|
"json-advanced",
|
32
32
|
"httpx",
|
33
|
-
"usso-jwt>=0.2.
|
33
|
+
"usso-jwt>=0.2.6",
|
34
34
|
]
|
35
35
|
|
36
36
|
[project.optional-dependencies]
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import logging
|
2
|
+
from urllib.parse import urlparse
|
2
3
|
|
3
4
|
import usso_jwt.exceptions
|
4
5
|
import usso_jwt.schemas
|
@@ -22,6 +23,8 @@ class UssoAuth:
|
|
22
23
|
self,
|
23
24
|
*,
|
24
25
|
jwt_config: AvailableJwtConfigs | None = None,
|
26
|
+
from_base_usso_url: str | None = None,
|
27
|
+
**kwargs: object,
|
25
28
|
) -> None:
|
26
29
|
"""Initialize the USSO authentication client.
|
27
30
|
|
@@ -31,6 +34,7 @@ class UssoAuth:
|
|
31
34
|
if jwt_config is None:
|
32
35
|
jwt_config = AuthConfig()
|
33
36
|
self.jwt_configs = AuthConfig.validate_jwt_configs(jwt_config)
|
37
|
+
self.from_base_usso_url = from_base_usso_url
|
34
38
|
|
35
39
|
def user_data_from_token(
|
36
40
|
self,
|
@@ -55,6 +59,28 @@ class UssoAuth:
|
|
55
59
|
USSOException: If token is invalid and raise_exception is True
|
56
60
|
"""
|
57
61
|
exp = None
|
62
|
+
|
63
|
+
if self.from_base_usso_url:
|
64
|
+
try:
|
65
|
+
jwt_obj = usso_jwt.schemas.JWT(
|
66
|
+
token=token,
|
67
|
+
config=self.jwt_configs[0],
|
68
|
+
payload_class=UserData,
|
69
|
+
)
|
70
|
+
iss = jwt_obj.unverified_payload.iss
|
71
|
+
iss_domain = urlparse(iss).netloc
|
72
|
+
jwt_obj.config.jwks_url = (
|
73
|
+
f"{self.from_base_usso_url}/.well-known/jwks.json?"
|
74
|
+
f"domain={iss_domain}"
|
75
|
+
)
|
76
|
+
if jwt_obj.verify(
|
77
|
+
expected_token_type=expected_token_type,
|
78
|
+
**kwargs,
|
79
|
+
):
|
80
|
+
return jwt_obj.payload
|
81
|
+
except usso_jwt.exceptions.JWTError as e:
|
82
|
+
exp = e
|
83
|
+
|
58
84
|
for jwk_config in self.jwt_configs:
|
59
85
|
try:
|
60
86
|
jwt_obj = usso_jwt.schemas.JWT(
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import json
|
2
|
+
import os
|
2
3
|
from typing import Any, Literal, Union
|
3
4
|
|
4
5
|
import usso_jwt.config
|
@@ -7,6 +8,8 @@ from pydantic import BaseModel, model_validator
|
|
7
8
|
from .user import UserData
|
8
9
|
from .utils.string_utils import get_authorization_scheme_param
|
9
10
|
|
11
|
+
BASE_USSO_URL = os.getenv("BASE_USSO_URL") or "https://sso.usso.io"
|
12
|
+
|
10
13
|
|
11
14
|
class HeaderConfig(BaseModel):
|
12
15
|
type: Literal["Authorization", "Cookie", "CustomHeader"] = "Cookie"
|
@@ -42,7 +45,7 @@ class HeaderConfig(BaseModel):
|
|
42
45
|
|
43
46
|
|
44
47
|
class APIHeaderConfig(HeaderConfig):
|
45
|
-
verify_endpoint: str = "
|
48
|
+
verify_endpoint: str = f"{BASE_USSO_URL}/api/sso/v1/apikeys/verify"
|
46
49
|
|
47
50
|
|
48
51
|
class AuthConfig(usso_jwt.config.JWTConfig):
|
@@ -14,15 +14,20 @@ class USSOAuthentication(UssoAuth):
|
|
14
14
|
def __init__(
|
15
15
|
self,
|
16
16
|
jwt_config: AvailableJwtConfigs | None = None,
|
17
|
+
*,
|
17
18
|
raise_exception: bool = True,
|
18
19
|
expected_token_type: str = "access",
|
20
|
+
from_base_usso_url: str | None = None,
|
19
21
|
) -> None:
|
20
22
|
if jwt_config is None:
|
21
23
|
jwt_config = AuthConfig()
|
22
24
|
|
23
|
-
super().__init__(
|
25
|
+
super().__init__(
|
26
|
+
jwt_config=jwt_config, from_base_usso_url=from_base_usso_url
|
27
|
+
)
|
24
28
|
self.raise_exception = raise_exception
|
25
29
|
self.expected_token_type = expected_token_type
|
30
|
+
self.from_base_usso_url = from_base_usso_url
|
26
31
|
|
27
32
|
def __call__(self, request: Request) -> UserData:
|
28
33
|
return self.usso_access_security(request)
|
@@ -41,7 +46,6 @@ class USSOAuthentication(UssoAuth):
|
|
41
46
|
return token
|
42
47
|
return None
|
43
48
|
|
44
|
-
# @instance_method
|
45
49
|
def usso_access_security(self, request: Request) -> UserData | None:
|
46
50
|
"""Return the user associated with a token value."""
|
47
51
|
api_key = self.get_request_api_key(request)
|
@@ -62,7 +66,6 @@ class USSOAuthentication(UssoAuth):
|
|
62
66
|
raise_exception=self.raise_exception,
|
63
67
|
)
|
64
68
|
|
65
|
-
# @instance_method
|
66
69
|
def jwt_access_security_ws(self, websocket: WebSocket) -> UserData | None:
|
67
70
|
"""Return the user associated with a token value."""
|
68
71
|
api_key = self.get_request_api_key(websocket)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: usso
|
3
|
-
Version: 0.28.
|
3
|
+
Version: 0.28.29
|
4
4
|
Summary: A plug-and-play client for integrating universal single sign-on (SSO) with Python frameworks, enabling secure and seamless authentication across microservices.
|
5
5
|
Author-email: Mahdi Kiani <mahdikiany@gmail.com>
|
6
6
|
Maintainer-email: Mahdi Kiani <mahdikiany@gmail.com>
|
@@ -28,7 +28,7 @@ Requires-Dist: cachetools
|
|
28
28
|
Requires-Dist: singleton_package
|
29
29
|
Requires-Dist: json-advanced
|
30
30
|
Requires-Dist: httpx
|
31
|
-
Requires-Dist: usso-jwt>=0.2.
|
31
|
+
Requires-Dist: usso-jwt>=0.2.6
|
32
32
|
Provides-Extra: fastapi
|
33
33
|
Requires-Dist: fastapi>=0.65.0; extra == "fastapi"
|
34
34
|
Requires-Dist: uvicorn[standard]>=0.13.0; extra == "fastapi"
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|