sso-nebus 0.1.3__py3-none-any.whl → 0.1.4__py3-none-any.whl
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.
- sso_nebus/service_client.py +51 -1
- {sso_nebus-0.1.3.dist-info → sso_nebus-0.1.4.dist-info}/METADATA +1 -1
- {sso_nebus-0.1.3.dist-info → sso_nebus-0.1.4.dist-info}/RECORD +5 -5
- {sso_nebus-0.1.3.dist-info → sso_nebus-0.1.4.dist-info}/WHEEL +1 -1
- {sso_nebus-0.1.3.dist-info → sso_nebus-0.1.4.dist-info}/licenses/LICENSE +0 -0
sso_nebus/service_client.py
CHANGED
|
@@ -1,12 +1,33 @@
|
|
|
1
1
|
"""Клиент для микросервисного взаимодействия (Client Credentials)"""
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
import base64
|
|
4
|
+
import json
|
|
5
|
+
from typing import Any, Dict, Optional
|
|
4
6
|
|
|
5
7
|
from .base import BaseClient
|
|
6
8
|
from .models import TokenResponse, UserInfo
|
|
7
9
|
from .exceptions import TokenError
|
|
8
10
|
|
|
9
11
|
|
|
12
|
+
def _decode_jwt_payload(token: str) -> Dict[str, Any]:
|
|
13
|
+
"""
|
|
14
|
+
Декодирует payload JWT без проверки подписи (только чтение полей).
|
|
15
|
+
Токен получен от SSO, используется для извлечения claim service_name.
|
|
16
|
+
"""
|
|
17
|
+
try:
|
|
18
|
+
parts = token.split(".")
|
|
19
|
+
if len(parts) != 3:
|
|
20
|
+
return {}
|
|
21
|
+
payload_b64 = parts[1]
|
|
22
|
+
padding = 4 - len(payload_b64) % 4
|
|
23
|
+
if padding != 4:
|
|
24
|
+
payload_b64 += "=" * padding
|
|
25
|
+
payload_bytes = base64.urlsafe_b64decode(payload_b64)
|
|
26
|
+
return json.loads(payload_bytes.decode("utf-8"))
|
|
27
|
+
except Exception:
|
|
28
|
+
return {}
|
|
29
|
+
|
|
30
|
+
|
|
10
31
|
class ServiceClient(BaseClient):
|
|
11
32
|
"""Клиент для микросервисного взаимодействия с Client Credentials Grant"""
|
|
12
33
|
|
|
@@ -107,6 +128,35 @@ class ServiceClient(BaseClient):
|
|
|
107
128
|
"""Получить текущий access token"""
|
|
108
129
|
return self._access_token
|
|
109
130
|
|
|
131
|
+
def get_token_payload(self, access_token: Optional[str] = None) -> Dict[str, Any]:
|
|
132
|
+
"""
|
|
133
|
+
Получить payload текущего JWT токена (без проверки подписи).
|
|
134
|
+
Удобно для чтения полей, вшитых SSO (например service_name).
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
access_token: Токен (если не указан, используется сохранённый)
|
|
138
|
+
|
|
139
|
+
Returns:
|
|
140
|
+
Словарь с полями payload или пустой словарь при ошибке
|
|
141
|
+
"""
|
|
142
|
+
token = access_token or self._access_token
|
|
143
|
+
if not token:
|
|
144
|
+
return {}
|
|
145
|
+
return _decode_jwt_payload(token)
|
|
146
|
+
|
|
147
|
+
def get_service_name(self, access_token: Optional[str] = None) -> Optional[str]:
|
|
148
|
+
"""
|
|
149
|
+
Получить название сервиса из JWT токена (поле service_name, вшитое SSO).
|
|
150
|
+
|
|
151
|
+
Args:
|
|
152
|
+
access_token: Токен (если не указан, используется сохранённый)
|
|
153
|
+
|
|
154
|
+
Returns:
|
|
155
|
+
Название сервиса или None, если токена нет или поле отсутствует
|
|
156
|
+
"""
|
|
157
|
+
payload = self.get_token_payload(access_token)
|
|
158
|
+
return payload.get("service_name")
|
|
159
|
+
|
|
110
160
|
async def request_with_auth(
|
|
111
161
|
self,
|
|
112
162
|
method: str,
|
|
@@ -5,9 +5,9 @@ sso_nebus/exmples/example_admin.py,sha256=eAqkS4J5YyJneP4EPUrBlvNbGlK7rHEO39kCkl
|
|
|
5
5
|
sso_nebus/exmples/example_service.py,sha256=19NNTmbaRSaWLpDQffGWNDmXkDJXdLOgD2WkV32xUu8,1778
|
|
6
6
|
sso_nebus/exmples/example_user.py,sha256=c_Uf36FDHIXvv_vdqsO5XvXkvu1YOUsqaTO44_8DqVM,1878
|
|
7
7
|
sso_nebus/models.py,sha256=0xIE5RvnxV2sAxO7_GTCes6HlHbdzGwHIjWVe1X7-ks,3024
|
|
8
|
-
sso_nebus/service_client.py,sha256=
|
|
8
|
+
sso_nebus/service_client.py,sha256=ptXKHyoEYUpaU-yHrDG2IGEMp-tKSpLJzvK8syqEG2k,7558
|
|
9
9
|
sso_nebus/user_client.py,sha256=-3pJmvZxJgyEo3moGQvZVAOhJMOIC6NuE8NgJ33Fyfs,12976
|
|
10
|
-
sso_nebus-0.1.
|
|
11
|
-
sso_nebus-0.1.
|
|
12
|
-
sso_nebus-0.1.
|
|
13
|
-
sso_nebus-0.1.
|
|
10
|
+
sso_nebus-0.1.4.dist-info/licenses/LICENSE,sha256=dCbOm3zpH8T7vLDC2K7QJLu-LEl2zqaSuyARbqfGsEY,1863
|
|
11
|
+
sso_nebus-0.1.4.dist-info/METADATA,sha256=sZwTP8G8neMmje_rHGW2x3-lNCri4cSVtGtuYwhPNNw,8406
|
|
12
|
+
sso_nebus-0.1.4.dist-info/WHEEL,sha256=3ny-bZhpXrU6vSQ1UPG34FoxZBp3lVcvK0LkgUz6VLk,88
|
|
13
|
+
sso_nebus-0.1.4.dist-info/RECORD,,
|
|
File without changes
|