fixing
This commit is contained in:
parent
7b0088c0bc
commit
a988696408
|
|
@ -53,6 +53,17 @@ class EhrClient(BaseClient):
|
||||||
self._token_type: str | None = None
|
self._token_type: str | None = None
|
||||||
self._token_expires_at: float | None = None
|
self._token_expires_at: float | None = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _normalize_token_type(token_type: str | None) -> str:
|
||||||
|
# 北森文档示例返回 token_type=bearer(小写),但鉴权头要求 "Bearer <token>"。
|
||||||
|
# 这里统一规范为首字母大写,避免服务端大小写敏感导致 401。
|
||||||
|
raw = str(token_type or "").strip()
|
||||||
|
if not raw:
|
||||||
|
return "Bearer"
|
||||||
|
if raw.lower() == "bearer":
|
||||||
|
return "Bearer"
|
||||||
|
return raw
|
||||||
|
|
||||||
def authenticate(self) -> str:
|
def authenticate(self) -> str:
|
||||||
body: dict[str, Any] = {
|
body: dict[str, Any] = {
|
||||||
"grant_type": self.grant_type,
|
"grant_type": self.grant_type,
|
||||||
|
|
@ -67,7 +78,7 @@ class EhrClient(BaseClient):
|
||||||
)
|
)
|
||||||
data = resp.json() if resp.content else {}
|
data = resp.json() if resp.content else {}
|
||||||
access_token = str(data.get("access_token", "") or "")
|
access_token = str(data.get("access_token", "") or "")
|
||||||
token_type = str(data.get("token_type", "") or "Bearer")
|
token_type = self._normalize_token_type(data.get("token_type"))
|
||||||
expires_in = int(data.get("expires_in", 0) or 0)
|
expires_in = int(data.get("expires_in", 0) or 0)
|
||||||
if not access_token:
|
if not access_token:
|
||||||
raise RuntimeError("EHR authenticate failed (access_token missing)")
|
raise RuntimeError("EHR authenticate failed (access_token missing)")
|
||||||
|
|
@ -88,7 +99,7 @@ class EhrClient(BaseClient):
|
||||||
|
|
||||||
def request(self, method: str, path: str, **kwargs: Any) -> httpx.Response: # type: ignore[override]
|
def request(self, method: str, path: str, **kwargs: Any) -> httpx.Response: # type: ignore[override]
|
||||||
token = self._get_access_token()
|
token = self._get_access_token()
|
||||||
token_type = self._token_type or "Bearer"
|
token_type = self._normalize_token_type(self._token_type)
|
||||||
|
|
||||||
headers = dict(kwargs.pop("headers", {}) or {})
|
headers = dict(kwargs.pop("headers", {}) or {})
|
||||||
headers["Authorization"] = f"{token_type} {token}"
|
headers["Authorization"] = f"{token_type} {token}"
|
||||||
|
|
@ -106,7 +117,7 @@ class EhrClient(BaseClient):
|
||||||
self._token_expires_at = None
|
self._token_expires_at = None
|
||||||
|
|
||||||
token2 = self._get_access_token()
|
token2 = self._get_access_token()
|
||||||
token_type2 = self._token_type or "Bearer"
|
token_type2 = self._normalize_token_type(self._token_type)
|
||||||
headers["Authorization"] = f"{token_type2} {token2}"
|
headers["Authorization"] = f"{token_type2} {token2}"
|
||||||
return super().request(method, path, headers=headers, **kwargs)
|
return super().request(method, path, headers=headers, **kwargs)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue