Pobieranie tokenu dostępu drukarki uniwersalnej (UP)
Ważne
Aby pobrać token dostępu, drukarka musi być już zarejestrowana w usłudze Universal Print.
Aby uzyskać token dostępu reprezentujący drukarkę, drukarka będzie musiała wygenerować token internetowy JSON (JWT) i podpisać go przy użyciu klucza prywatnego certyfikatu.
Procedura jest następująca:
- Zażądaj elementu innego niż z punktu końcowego tokenu urządzenia.
- Wygeneruj urządzenie JWT z odpowiednimi informacjami i podpisz je za pomocą klucza prywatnego.
- Wyślij żądanie do punktu końcowego tokenu urządzenia za pomocą zestawu JWT w treści.
1 Żądanie nonce
Aby zażądać wartości innej niż, wyślij żądanie POST do punktu końcowego tokenu urządzenia z treścią zawierającą wyzwanie serwera.
1.1 Żądanie HTTP
POST {device_token_url}
{device_token_url}
to adres URL otrzymany od pomyślnej odpowiedzi rejestracji.
1.2 Żądanie typu zawartości
application/x-www-form-urlencoded
1.3 Ładunek żądania
grant_type=srv_challenge&windows_api_version=2.0
1.4 Pomyślna odpowiedź
Zwraca wartość 200 OK i nonce w ładunku odpowiedzi w formacie JSON z następującymi wartościami (wielkość liter jest rozróżniana):
Nazwa wartości | Typ wartości | opis | Wymagania |
---|---|---|---|
Nonce | string | Ciąg niezwiązany z żądaniem tokenu. | Tak |
1.5 Przykłady
1.5.1 Żądanie
POST https://login.microsoftonline.com/425a8e89-feb9-40d2-9fe5-07fb45419e4b/oauth2/token HTTP/1.1
Host: login.microsoftonline.com
Content-Length: 48
grant_type=srv_challenge&windows_api_version=2.0
Odpowiedź 1.5.2
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: text/html; charset=utf-8
Content-Length: 132
{
"Nonce": "AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rO4c24C6C31bER-HgavkQr-xx11qx0DFkaB6rfm-ikMj\_eUCSQ12bS4Id06ae1CUQjd8jN7xc4uGK-PA6Bj83HyAA"
}
2 Generowanie urządzenia JWT
Wygenerowany zestaw JWT urządzenia będzie zawierać informacje potrzebne dostawcy tokenów do wystawienia tokenu dostępu urządzenia do drukarki. Następne sekcje zawierają szczegółowe informacje potrzebne w nagłówku, treści i podpisie JWT.
2.1 Nagłówek JWT
Potrzebne są następujące parametry nagłówka JWT:
Nazwa wartości | Typ wartości | opis | Wymagania |
---|---|---|---|
alga | string | Algorytm klucza publicznego używany do generowania klucza publicznego. Musi odpowiadać informacjom o żądaniu rejestracji, które powinny mieć wartość "RS256". | Tak |
Typowe | string | Parametr nagłówka typu. Powinna mieć wartość "JWT". | Tak |
x5c | string | Pełna treść certyfikatu urządzenia (zawiera tylko klucz publiczny). Jest to certyfikat zwrócony przez pomyślną odpowiedź rejestracji. | Tak |
2.2 Treść JWT
Potrzebne są następujące parametry treści JWT:
Nazwa wartości | Typ wartości | opis | Wymagania |
---|---|---|---|
request_nonce | string | Wartość nonce uzyskana w sekcji 1. | Tak |
grant_type | string | Stały ciąg literału "device_token" , który wskazuje serwerowi, że wymagany jest token tylko dla urządzenia. | Tak |
zasób | string | Docelowi odbiorcy tokenu dostępu. Jest to wartość "mcp_svc_resource_id" zwrócona przez pomyślną odpowiedź rejestracji Ukończono. Na przykład https://print.print.microsoft.com | Tak |
client_id | string | Identyfikator aplikacji (klienta) zarejestrowanej aplikacja systemu Azure z uprawnieniami interfejsu API do usługi Universal Print. Aby utworzyć aplikacja systemu Azure z odpowiednimi uprawnieniami interfejsu API, zapoznaj się z tematem Rejestracja identyfikatora klienta OEM. | Tak |
redirect_uri | string | Skonfigurowany identyfikator URI przekierowania dla zarejestrowanej aplikacja systemu Azure używanej dla "client_id" w tej sekcji. Aby skonfigurować identyfikator URI przekierowania dla zarejestrowanego aplikacja systemu Azure, postępuj zgodnie z rejestracją identyfikatora klienta OEM. | Tak |
iss | string | Identyfikator urządzenia w chmurze otrzymany od pomyślnej odpowiedzi rejestracji. | Tak |
2.3 Podpis JWT
Zestaw JWT podpisany przez klucz prywatny urządzenia, który służy do udowodnienia, że żądanie zostało wystawione z urządzenia, a nie odtwarzane z innego.
2.4 Przykład wygenerowany JWT
{
"alg": "RS256",
"typ": "JWT",
"x5c": "MIID8jCCAtqgAwIBAgIQtJE/zIv3C5JOPoIeezhfLzANBgkqhkiG9w0BAQsFADB4MXYwEQYKCZImiZPyLGQBGRYDbmV0MBUGCgmSJomT8ixkARkWB3dpbmRvd3MwHQYDVQQDExZNUy1Pcmdhbml6YXRpb24tQWNjZXNzMCsGA1UECxMkODJkYmFjYTQtM2U4MS00NmNhLTljNzMtMDk1MGMxZWFjYTk3MB4XDTE4MDUxMDAzMjUzMVoXDTI4MDUxMDAzNTUzMVowLzEtMCsGA1UEAxMkZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjGw0ePNEZTNgDbTMMb+m8feCQY70yotozZnMFh5HehO2AvlaR1mZnAI+7rWd5pUdmPo83wGSchqj4cOsOQF699UEmZllDDpCMd9e/kkyFFQYVFBjLV67jUNyM5yDwCqSsNyTImuBQjpgOCoYt7nrsJ5nlaEiWB7HNMbPEJI8Szp9eMci/5j5ktRqU9SeWBUF7SIruaFKt5i7phTwx9ELJo554/yaQtJx5gZs1hpO/z9iLORu+13cj5aruvNZFnlyNyD7LNZ43J5biIIuqbFaUhCLBX70vuE/yhxkKjvyZwovP1PP5Bqc7ZLD6vIdh80bgJLd+xFKbL4OcD2DgxWI4QIDAQABo4HAMIG9MAwGA1UdEwEB/wQCMAAwFgYDVR0lAQH/BAwwCgYIKwYBBQUHAwIwIgYLKoZIhvcUAQWCHAIEEwSBEKJ1punFp+dPjoP+Hvr4LsYwIgYLKoZIhvcUAQWCHAMEEwSBEHlLkyG0XmRHoNfDVt0FSVQwIgYLKoZIhvcUAQWCHAUEEwSBEImOWkK5/tJAn+UH+0VBnkswFAYLKoZIhvcUAQWCHAgEBQSBAk5BMBMGCyqGSIb3FAEFghwHBAQEgQEwMA0GCSqGSIb3DQEBCwUAA4IBAQB3q4Ey9AijQmHy0S3+fy1PV7pXq6aMhAgF7HvzmEwdmnjSCfvUd+fPkZA3tGQ6gkGlJ3mI4wq0xBZfk6YEQLLSuvukCphzZitz2NnpeCYMYpT2L7G1+EsIMu5+Wz84S4IO57IMBSLMDmsLLP2bHq+w1VOYgS9cO7Vha/nR3Z542LnaRKINUpFedHAtffv2tOQLRCPWk20KP5LEpKuEcM/r5EHFH6beKFuYePpJ7/dhKH69cZFWRtqgaV7BHxeDVr/n3kyHbDv1rwTXIYHaM3qEXDcSmyqEZqu0WEoz0FpVYt2pRw9pSb29+Y6n4vWTyWxVI8zMqDieYmaw7uXctqrr"
}.
{
"request_nonce": "AQABAAAAAADX8GCi6Js6SK82TsD2Pb7rO4c24C6C31bER-HgavkQr-xx11qx0DFkaB6rfm-ikMj\_eUCSQ12bS4Id06ae1CUQjd8jN7xc4uGK-PA6Bj83HyAA",
"grant_type": "device_token",
"resource": "https://microsoft.com/mcp",
"client_id": "1ef464e5-0b61-4c6f-b822-5dc015b9463e",
"redirect_uri": "https://print.print.microsoft.com/",
"iss": "e9a675a2-a7c5-4fe7-8e83-fe1efaf82ec6"
}.
[Signature]
3 Żądanie tokenu dostępu urządzenia
Aby zażądać tokenu urządzenia, wyślij żądanie POST do punktu końcowego tokenu urządzenia z treścią zawierającą JWT wygenerowaną w sekcji 2.
3.1 Żądanie HTTP
POST {device_token_url}
{device_token_url}
to adres URL otrzymany od pomyślnej odpowiedzi rejestracji.
3.2 Żądanie typu zawartości
application/x-www-form-urlencoded
3.3 Ładunek żądania
Format zakodowany w adresie URL formularza z następującymi parami nazwa/wartość:
Nazwa wartości | Opis/wartość | Wymagania |
---|---|---|
grant_type | Należy ustawić wartość urn:ietf:params:oauth:grant-type:jwt-bearer . Oznacza to, że żądanie tokenu zostało opisane w JWT. |
Tak |
żądanie | Zakodowany algorytm Base-64 JWT wygenerowany w sekcji 2. | Tak |
Ważne
Upewnij się, że "pliki cookie" nie są uwzględniane podczas wysyłania żądania tokenu urządzenia. Wysyłanie plików cookie może spowodować nieoczekiwane zachowanie.
3.4 Pomyślna odpowiedź
Zwraca wartość 200 OK i token dostępu w ładunku odpowiedzi w formacie JSON z następującymi głównymi wartościami (uwzględniana wielkość liter):
Nazwa wartości | Typ wartości | opis | Wymagania |
---|---|---|---|
access_token | string | Żądany token dostępu jako podpisany token internetowy JSON (JWT). Drukarka może używać tego tokenu do uwierzytelniania w zabezpieczonym zasobie, takim jak internetowy interfejs API. | Tak |
token_type | string | Wskazuje wartość typu tokenu. Jedynym typem, który powinien zostać zwrócony, jest obecnie element nośny. | Tak |
device_info | string | Zestaw JWT reprezentujący urządzenie. | Tak |
expires_in | string | Jak długo token dostępu jest prawidłowy (w sekundach). | Tak |
expires_on | string | Czas wygaśnięcia tokenu dostępu. Data jest reprezentowana jako liczba sekund od 1970-01-01T0:0:0Z UTC do czasu wygaśnięcia. Ta wartość służy do określania okresu istnienia buforowanych tokenów. | Tak |
not_before | string | Czas, przed którym JWT NIE MOŻE zostać zaakceptowany do przetwarzania. | Tak |
zasób | string | Identyfikator URI identyfikatora aplikacji internetowego interfejsu API (zabezpieczony zasób). | Tak |
3.5 Odpowiedź na błąd
Szczegółowe odpowiedzi na błędy opisano tutaj: Użyj kodu autoryzacji, aby zażądać tokenu dostępu
Ładunek odpowiedzi jest w formacie JSON z następującymi głównymi wartościami (wielkość liter jest rozróżniana):
Nazwa wartości | Typ wartości | opis | Wymagania |
---|---|---|---|
error | string | Ciąg kodu błędu, który może służyć do klasyfikowania typów występujących błędów i może służyć do reagowania na błędy. | Tak |
error_description | string | Określony komunikat o błędzie, który może pomóc deweloperowi zidentyfikować główną przyczynę błędu uwierzytelniania. | Nie. |
error_codes | Tablica liczb całkowitych | Lista kodów błędów specyficznych dla usługi STS, które mogą pomóc w diagnostyce. | Nie. |
timestamp | string | Czas wystąpienia błędu. | Nie. |
Trace_id | string | Unikatowy identyfikator żądania, który może pomóc w diagnostyce. | Nie. |
correlation_id | string | Unikatowy identyfikator żądania, który może pomóc w diagnostyce między składnikami. | Nie. |
Błąd krytyczny 3.5.1
Jeśli drukarka została wyrejestrowana z portalu UP lub certyfikat wygaśnie, drukarka nie otrzyma tokenu dostępu urządzenia. W takim przypadku punkt końcowy tokenu urządzenia zwróci wartość "error": "invalid_grant"
i "suberror": "device_authentication_failed"
. W tym momencie drukarka powinna zresetować stan wyrejestrowany, ponieważ urządzenie będzie musiało zostać ponownie zarejestrowane.
Na przykład:
{
"error": "invalid_grant",
"error_description": "AADSTS70002: Error validating credentials. AADSTS50155: Device is not authenticated.\\r\\nTrace ID: b099e7ad-ccf8-4eb7-b105-cced2f724d00\\r\\nCorrelation ID: 0d72010c-5a1f-4c19-99a7-48df28c5db66\\r\\nTimestamp: 2018-05-14 01:06:51Z",
"error_codes": [70002, 50155],
"trace_id": "b099e7ad-ccf8-4eb7-b105-cced2f724d00",
"correlation_id": "0d72010c-5a1f-4c19-99a7-48df28c5db66",
"suberror": "device_authentication_failed"
}
3.6 Przykłady
Żądanie 3.6.1
POST https://login.microsoftonline.com/425a8e89-feb9-40d2-9fe5-07fb45419e4b/oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Accept-Charset: utf-8
Host: login.microsoftonline.com
Content-Length: 2737
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer&request=eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCIsIng1YyI6Ik1JSUQ4akNDQXRxZ0F3SUJBZ0lRdEpFL3pJdjNDNUpPUG9JZWV6aGZMekFOQmdrcWhraUc5dzBCQVFzRkFEQjRNWFl3RVFZS0NaSW1pWlB5TEdRQkdSWURibVYwTUJVR0NnbVNKb21UOGl4a0FSa1dCM2RwYm1SdmQzTXdIUVlEVlFRREV4Wk5VeTFQY21kaGJtbDZZWFJwYjI0dFFXTmpaWE56TUNzR0ExVUVDeE1rT0RKa1ltRmpZVFF0TTJVNE1TMDBObU5oTFRsak56TXRNRGsxTUdNeFpXRmpZVGszTUI0WERURTRNRFV4TURBek1qVXpNVm9YRFRJNE1EVXhNREF6TlRVek1Wb3dMekV0TUNzR0ExVUVBeE1rWlRsaE5qYzFZVEl0WVRkak5TMDBabVUzTFRobE9ETXRabVV4WldaaFpqZ3laV00yTUlJQklqQU5CZ2txaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFqR3cwZVBORVpUTmdEYlRNTWIrbThmZUNRWTcweW90b3pabk1GaDVIZWhPMkF2bGFSMW1abkFJKzdyV2Q1cFVkbVBvODN3R1NjaHFqNGNPc09RRjY5OVVFbVpsbEREcENNZDllL2treUZGUVlWRkJqTFY2N2pVTnlNNXlEd0NxU3NOeVRJbXVCUWpwZ09Db1l0N25yc0o1bmxhRWlXQjdITk1iUEVKSThTenA5ZU1jaS81ajVrdFJxVTlTZVdCVUY3U0lydWFGS3Q1aTdwaFR3eDlFTEpvNTU0L3lhUXRKeDVnWnMxaHBPL3o5aUxPUnUrMTNjajVhcnV2TlpGbmx5TnlEN0xOWjQzSjViaUlJdXFiRmFVaENMQlg3MHZ1RS95aHhrS2p2eVp3b3ZQMVBQNUJxYzdaTEQ2dklkaDgwYmdKTGQreEZLYkw0T2NEMkRneFdJNFFJREFRQUJvNEhBTUlHOU1Bd0dBMVVkRXdFQi93UUNNQUF3RmdZRFZSMGxBUUgvQkF3d0NnWUlLd1lCQlFVSEF3SXdJZ1lMS29aSWh2Y1VBUVdDSEFJRUV3U0JFS0oxcHVuRnArZFBqb1ArSHZyNExzWXdJZ1lMS29aSWh2Y1VBUVdDSEFNRUV3U0JFSGxMa3lHMFhtUkhvTmZEVnQwRlNWUXdJZ1lMS29aSWh2Y1VBUVdDSEFVRUV3U0JFSW1PV2tLNS90SkFuK1VIKzBWQm5rc3dGQVlMS29aSWh2Y1VBUVdDSEFnRUJRU0JBazVCTUJNR0N5cUdTSWIzRkFFRmdod0hCQVFFZ1FFd01BMEdDU3FHU0liM0RRRUJDd1VBQTRJQkFRQjNxNEV5OUFpalFtSHkwUzMrZnkxUFY3cFhxNmFNaEFnRjdIdnptRXdkbW5qU0NmdlVkK2ZQa1pBM3RHUTZna0dsSjNtSTR3cTB4QlpmazZZRVFMTFN1dnVrQ3BoelppdHoyTm5wZUNZTVlwVDJMN0cxK0VzSU11NStXejg0UzRJTzU3SU1CU0xNRG1zTExQMmJIcSt3MVZPWWdTOWNPN1ZoYS9uUjNaNTQyTG5hUktJTlVwRmVkSEF0ZmZ2MnRPUUxSQ1BXazIwS1A1TEVwS3VFY00vcjVFSEZINmJlS0Z1WWVQcEo3L2RoS0g2OWNaRldSdHFnYVY3Qkh4ZURWci9uM2t5SGJEdjFyd1RYSVlIYU0zcUVYRGNTbXlxRVpxdTBXRW96MEZwVll0MnBSdzlwU2IyOStZNm40dldUeVd4Vkk4ek1xRGllWW1hdzd1WGN0cXJyIn0.eyJyZXF1ZXN0X25vbmNlIjoiQVFBQkFBQUFBQURYOEdDaTZKczZTSzgyVHNEMlBiN3JPNGMyNEM2QzMxYkVSLUhnYXZrUXIteHgxMXF4MERGa2FCNnJmbS1pa01qX2VVQ1NRMTJiUzRJZDA2YWUxQ1VRamQ4ak43eGM0dUdLLVBBNkJqODNIeUFBIiwiZ3JhbnRfdHlwZSI6ImRldmljZV90b2tlbiIsInJlc291cmNlIjoiaHR0cHM6Ly9taWNyb3NvZnQuY29tL21jcC1wcGUiLCJjbGllbnRfaWQiOiIxZWY0NjRlNS0wYjYxLTRjNmYtYjgyMi01ZGMwMTViOTQ2M2UiLCJyZWRpcmVjdF91cmkiOiJodHRwczovL21jcC1wcGUuYXp1cmV3ZWJzaXRlcy5uZXQvIiwiaXNzIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2In0.bmvBY7cdD\_dGtbB9dXbjbj5qc5k9ssqOMe1KQnnUnChLz1nkgBMLU\_jBMwsAoHCvI\_udQAdDgyNmWFcnWxTY0sLARZ6FQmjbGclqrqhj\_kkJXdkNBdGcwIXafjQiFkpDlpTMbVjBWoQq49aW-e\_OcmfsVIg8DCdS-s87x0fJ3fuHzZJzVGEHC4D-43EPxWTXfVbsvOV7RNK15lq5GXm10W4DkRngK6EpMq69g75KCUqT\_MEEh5dGezl5Kic8RLZQ72n5aEpc5Y6XK85b1TdOtBnxogVjJFSsxpz1sOIpODszVu9CSUg4CHEjadpKQ9DiYCg6zB9D5fYbMf3NrGWC9Q
Odpowiedź 3.6.2
HTTP/1.1 200 OK
Cache-Control: no-cache, no-store
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Content-Length: 2473
{
"token_type":"Bearer",
"expires_in":"3599",
"ext_expires_in":"0",
"expires_on":"1525928144","not_before":"1525924244","resource":"<https://microsoft.com/mcp>",
"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9.eyJhdWQiOiJodHRwczovL21pY3Jvc29mdC5jb20vbWNwLXBwZSIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzQyNWE4ZTg5LWZlYjktNDBkMi05ZmU1LTA3ZmI0NTQxOWU0Yi8iLCJpYXQiOjE1MjU5MjQyNDQsIm5iZiI6MTUyNTkyNDI0NCwiZXhwIjoxNTI1OTI4MTQ0LCJhbXIiOlsicnNhIl0sImRldmljZWlkIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2IiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvNDI1YThlODktZmViOS00MGQyLTlmZTUtMDdmYjQ1NDE5ZTRiLyIsImlkdHlwIjoiZGV2aWNlIiwiaXBhZGRyIjoiMTY3LjIyMC4wLjc0Iiwib2lkIjoiZjM5NjNiMDItY2NjNS00NTg5LTkwYjQtMDJkNTA0OWE5ZGY3Iiwic3ViIjoiZTlhNjc1YTItYTdjNS00ZmU3LThlODMtZmUxZWZhZjgyZWM2IiwidGlkIjoiNDI1YThlODktZmViOS00MGQyLTlmZTUtMDdmYjQ1NDE5ZTRiIiwidXRpIjoiV005dVBHbXltRWV3RmdpMl9PcEdBQSIsInZlciI6IjEuMCJ9.gjCICKD2NT69bro4wK8r6SJhP6CBflnBqmlpF3pITl\_1Klv1DNYTue7a-Tup0vkFu0inN8njTG7rxlK\_j4m2mn1iUuh6CO-o98hN6VzjrarvZceBzGtsiOU2jtdacWP4JmePtTaXRmGDlK-PbTLy\_v4VmbL\_cQN2RIEiwf81suwnBacko0xbQhO3cPmGwKZcB5kFV4tnHp0uBnxyfcpRfV-ZR9Age41LWDW1ulOsTVuv1Q4XmmOmStkh2-TH1jOq1did6jyK1LKncdsSvEhKeo49-yBNshGntPs24qWL2WShz5cMQ3w5OBbAUOwl1DL-\_NtcUjCwbaLRwS6Dyliejw\",\"device\_info\":\"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayIsImtpZCI6ImlCakwxUmNxemhpeTRmcHhJeGRacW9oTTJZayJ9.eyJhdWQiOiJiYWZjYjg2Zi1kYWFhLTQxYjEtYjQ5NC04NjA0MzZhNGMzMGQiLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIvIiwiaWF0IjoxNTI1OTI0MjQ0LCJuYmYiOjE1MjU5MjQyNDQsImV4cCI6MTUyNTkyODE0NCwiZGV2aWNlaWQiOiJlOWE2NzVhMi1hN2M1LTRmZTctOGU4My1mZTFlZmFmODJlYzYiLCJpZHAiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC80MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIvIiwiaWR0eXAiOiJkZXZpY2UiLCJvaWQiOiJmMzk2M2IwMi1jY2M1LTQ1ODktOTBiNC0wMmQ1MDQ5YTlkZjciLCJzdWIiOiJlOWE2NzVhMi1hN2M1LTRmZTctOGU4My1mZTFlZmFmODJlYzYiLCJ0aWQiOiI0MjVhOGU4OS1mZWI5LTQwZDItOWZlNS0wN2ZiNDU0MTllNGIiLCJ1dGkiOiJXTTl1UEdteW1FZXdGZ2kyX09wR0FBIiwidmVyIjoiMS4wIn0.CPNbz9Cr20Ig\_i7Fc8GUx1NVpGXqQs9HsNH3F-QxUeJsep7m1rwiTE8WXsfXxiNGco0j1HFykiHdAsE\_-ymeVXaUtA5InC3uEeiHuIihQGbo9GC5gibzjsS\_psfqE74v\_9o7WuJTjFhpGdl1h57sOX49la312uR\_Khr6I6tIGiFon-gn4rGq5U0O4NV\_5LeitiHUXxuVxD2O9J5vERpwmnQ0UtyxX9skyFGEtcEruNch6noy\_5710xbcYv-8uO4VM8tM6CoqigWg\_7o18OciJ0VRBmsFLZtJUOxVSlPKeFneFDyKujpttbMIP-0-FdS75qckkqGYzoVbSuzsIcJa5g"
}