Include device client token in auth header

Add DEVICE_CLIENT_TOKEN constant and pass it to SpotifyApi._set_authorization_header when storing access tokens. Also relocate proto imports in api.py. This ensures the device client token is included with authorization for device-scoped requests.
This commit is contained in:
Rafael Moraes
2026-03-28 09:02:10 -03:00
parent d970471507
commit a36ac72640
2 changed files with 8 additions and 3 deletions
+7 -3
View File
@@ -5,8 +5,6 @@ import time
from http.cookiejar import MozillaCookieJar
import base62
from .proto.extendedmetadata_pb2 import BatchedEntityRequest, BatchedExtensionResponse
from .proto.playplay_pb2 import PlayPlayLicenseRequest, PlayPlayLicenseResponse
import httpx
from ..utils import safe_json
@@ -15,6 +13,7 @@ from .constants import (
CLIENT_TOKEN_URL,
CLIENT_VERSION,
COOKIE_DOMAIN,
DEVICE_CLIENT_TOKEN,
EXTENDED_METADATA_API_URL,
GID_METADATA_URL,
HOME_PAGE_URL,
@@ -32,6 +31,8 @@ from .constants import (
from .device_flow import SpotifyDeviceFlow
from .enums import SessionType
from .exceptions import VotifyRequestException
from .proto.extendedmetadata_pb2 import BatchedEntityRequest, BatchedExtensionResponse
from .proto.playplay_pb2 import PlayPlayLicenseRequest, PlayPlayLicenseResponse
from .totp import Totp
logger = logging.getLogger(__name__)
@@ -186,7 +187,10 @@ class SpotifyApi:
self._access_token = token_data["access_token"]
self._set_authorization_header(token_data["access_token"])
self._set_authorization_header(
token_data["access_token"],
DEVICE_CLIENT_TOKEN,
)
self._authorization_expire_time = (
int(time.time()) + token_data["expires_in"]
) * 1000
+1
View File
@@ -37,3 +37,4 @@ DEVICE_RESOLVE_URL = "https://accounts.spotify.com/pair/api/resolve"
DEVICE_CLIENT_ID = "65b708073fc0480ea92a077233ca87bd" # Spotify for Desktop
DEVICE_SCOPE = "app-remote-control,playlist-modify,playlist-modify-private,playlist-modify-public,playlist-read,playlist-read-collaborative,playlist-read-private,streaming,transfer-auth-session,ugc-image-upload,user-follow-modify,user-follow-read,user-library-modify,user-library-read,user-modify,user-modify-playback-state,user-modify-private,user-personalized,user-read-birthdate,user-read-currently-playing,user-read-email,user-read-play-history,user-read-playback-position,user-read-playback-state,user-read-private,user-read-recently-played,user-top-read"
DEVICE_FLOW_USER_AGENT = "Spotify/126600447 Win32_x86_64/0 (PC laptop)"
DEVICE_CLIENT_TOKEN = "AAAyQwhc1wWtqYH7spRtLROv2auz6t7xi6xV0OIlc62hyvNrbjR3Lky8Lh2s7fi8jbjX1k31NBQ6d+mpEcAyXCvrNDmZSgTjuJ1QBVzqHOpP5t4E4kDvB36AfvXmcgZltN5dYgbiHal/R2LNupoZvT1fKocen24bUAHsInYgCtKy+kft4OWN1kaFo8LfNZymZzmXBXfxKfCiO1dKBQPz7Rv5hVPpcoyxkfAl4R5aNdap3iuRdAcaB4Udx28Eu98yrA=="