# FIDO驗證參考資料 # 網頁JS程式碼 ### 1.申請FIDO ```javascript= let doWebAuthnRegister = async function () { if ($("token").val() === "") { sa("error", "no given user's token") } // 註冊第一支 let res = await (await fetch("/api/webauthn/MyCard/registration/initialize", { method: "POST", headers: { "Authorization": "Bearer " + $("#token").val(), } })).json(); if (res.hasOwnProperty("success") && !res.success) { sa("error", res.error) return; } console.log(res) res.publicKey.challenge = bufferDecode(res.publicKey.challenge); res.publicKey.user.id = bufferDecode(res.publicKey.user.id); if (res.publicKey.excludeCredentials) { for (var i = 0; i < res.publicKey.excludeCredentials.length; i++) { res.publicKey.excludeCredentials[i].id = bufferDecode(res.publicKey.excludeCredentials[i].id); } } // 通知系統執行驗證 let credential = await navigator.credentials.create(res); // 註冊第二支 res = await (await fetch("/api/webauthn/MyCard/registration/finalize", { method: "POST", headers: { "Authorization": "Bearer " + $("#token").val(), "Content-Type": "application/json" }, body: JSON.stringify(unwrapPublicKeyCredential(credential)) })).json(); if (res.success) { sa("success", "Passkey enrolled successfully") return } sa("error", res.error) } ``` ### 2.驗證FIDO ```javascript= let doWebAuthnAuth = async function () { // 驗證第一支 let req = await (await fetch("/api/webauthn/MyCard/authentication/initialize", { method: "POST", body: JSON.stringify({ "transaction": $("#tx").val(), }), headers: { "Content-Type": "application/json" } })).json() req.publicKey.challenge = bufferDecode(req.publicKey.challenge) // 通知系統執行驗證 let resp = await navigator.credentials.get(req) // 驗證第一支 req = await (await fetch("/api/webauthn/MyCard/authentication/finalize", { method: "POST", body: JSON.stringify(unwrapPublicKeyCredential(resp)), headers: { "Content-Type": "application/json" } })).json() if (req.data === "") { sa("error", req.error) return } sa("success", "Successfully authenticated") $("#newToken").val(req.data) } ``` # cURL 傳接值,接API可參考 > cURL 可直接匯入Postman 錯誤類型(猜測)? ```jsonld= // token 有錯: { "success": false, "error": "invalid authorization, err=invalid signature" } // base64格式有誤: { "success": false, "error": "failed to parse webauthn registration request" } // 驗證失敗?: { "success": false, "error": "invalid session" } ``` ### 1.申請FIDO-第一支 ```bash= curl 'https://fido.mycard520.com/api/webauthn/MyCard/registration/initialize' \ -X 'POST' \ -H 'accept: */*' \ -H 'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6' \ -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL015Q2FyZCxmaWRvLm15Y2FyZDUyMC5jb20iLCJzdWIiOiI5N2MyNDFmNS01Zjk4LTRjZjMtODJiNS05ODg0ZDE3MmY2ZjEiLCJleHAiOjMzMjc1ODg2MTczLCJpYXQiOjE3MTg5MzQxNzMsImp0aSI6ImQ4Nzg4NDI4LTRhOGItNDc1YS05ODk1LWM1MGJhZDM4ZjRjYSIsIm9uY2UiOmZhbHNlLCJzY29wZSI6InVzZXIiLCJ0ZW5hbnRJZCI6Ijc1OTQzMDk0LWYxNzQtNDY0Zi1hYjU5LWJmMTRiODg3NGNjYSIsInRlbmFudEtleSI6Ik15Q2FyZCIsInRyYW5zYWN0aW9uIjpudWxsLCJzZXNzaW9uSWQiOm51bGwsImVtYWlsIjoia2V2aW4ubGlvdUBzb2Z0LXdvcmxkLmNvbS50dyJ9.PupMZk3ZyN-EZezyreKf5mTU47ciDwxWDHZzoaRM2zc35t62sjgQhrrifBGur_yo0PYM5nKQ4Gcc2MtnijFSATEMiOSLvoZpvrjoyKml6Wcz0qEN07jcAyk6VVYbgCqFgP_Tf6FnIvYSMobt1BcRtNvZnIfY4BjBiPECRf21_JHNFfOZVvhuHASZ05TxdfNJF6WQcOE-wkPET1iOtgBCuUkGOg2nZFpRHQ65-dMLcte6p_yGlXkuPnLcGLhCXK5ZxUDc5IjLzfgHWxtDmDy3iuZAOL0gVb_vIbq0njjl0QDAh3mtX8s2_4eBRZPQVY84V2XKl1gYr7oJ2ror0TOTN4kNFY5XOKZYbfm_Wbh3Q7RWLhtyiUHSlhwdPvCNjFRDHU2WHPce2V6Y6gUzqxQRStuVyI2H80g4TaBuQlWetBkATjJpzSpBBnUPHw3-_M0xSzw10VhHXUN-3x2wdAYnz0CZxRZBFOx-qDpYbj7NewAp7rOt2Z8dGrn5yRHtcUylIyTiusV8-FSeeon_Ed0veBw2N1qcItBLNjhcNJsl2P6Rlb01iBJR_bf209bZEbYRU4CWeV00ytbrnOlO4oC-E4pM9XiSTSQzgsE9F1nQEMLR8dWfkIvbU92NRDy_FCpF4panVf7Sab5G948_2ROU5OO2HTRRDFZx9agif6ZGA8M' \ -H 'content-length: 0' \ -H 'cookie: _ga_0LHGEZ6BMH=GS1.1.1703755073.1.0.1703755082.51.0.0; _ga_CPEG9ST3MJ=GS1.1.1709877057.1.1.1709877121.0.0.0; _ga_RL00X9D20B=GS1.1.1709884511.2.0.1709884511.0.0.0; _ga_CV36KLRLC5=GS1.2.1710382586.2.0.1710382586.0.0.0; _ga_R9559Q3WPK=GS1.1.1710382586.2.1.1710382680.0.0.0; _ga_CKVXXJKYYP=GS1.1.1715760726.3.0.1715760726.0.0.0; _ga_LW8BE3J7DN=GS1.1.1716887023.7.1.1716887821.0.0.0; _ga=GA1.1.1664159217.1703755070; _ga_3NC7MLJ8DD=GS1.1.1717404692.16.0.1717405318.0.0.0; _ga_4ZQQXSH36G=GS1.1.1717404692.13.0.1717405318.0.0.0; _ga_4V1XCWQRTN=GS1.1.1717404692.15.0.1717405318.0.0.0' \ -H 'origin: https://fido.mycard520.com' \ -H 'priority: u=1, i' \ -H 'referer: https://fido.mycard520.com/test' \ -H 'sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-origin' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' ``` 回傳: ```jsonld= { "publicKey": { "rp": { "name": "MyCardTenant", "id": "fido.mycard520.com" }, "user": { "name": "MyCardTenant - kevin.liou@soft-world.com.tw", "icon": "97c241f5-5f98-4cf3-82b5-9884d172f6f1", "displayName": "MyCardTenant - kevin.liou@soft-world.com.tw", "id": "OTdjMjQxZjUtNWY5OC00Y2YzLTgyYjUtOTg4NGQxNzJmNmYx" }, "challenge": "i1tCG0CN-7SZ3NmJbdkAqZLOjykNAUn7M_SzVFJTXr4", "pubKeyCredParams": [ { "type": "public-key", "alg": -7 }, { "type": "public-key", "alg": -35 }, { "type": "public-key", "alg": -36 }, { "type": "public-key", "alg": -257 }, { "type": "public-key", "alg": -258 }, { "type": "public-key", "alg": -259 }, { "type": "public-key", "alg": -37 }, { "type": "public-key", "alg": -38 }, { "type": "public-key", "alg": -39 }, { "type": "public-key", "alg": -8 } ], "timeout": 300000, "excludeCredentials": [], "authenticatorSelection": { "requireResidentKey": true, "residentKey": "required", "userVerification": "preferred" } } } ``` ### 2.申請FIDO-第二支 ```bash= curl 'https://fido.mycard520.com/api/webauthn/MyCard/registration/finalize' \ -H 'accept: */*' \ -H 'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6' \ -H 'authorization: Bearer eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL015Q2FyZCxmaWRvLm15Y2FyZDUyMC5jb20iLCJzdWIiOiI5N2MyNDFmNS01Zjk4LTRjZjMtODJiNS05ODg0ZDE3MmY2ZjEiLCJleHAiOjMzMjc1ODg2MTczLCJpYXQiOjE3MTg5MzQxNzMsImp0aSI6ImQ4Nzg4NDI4LTRhOGItNDc1YS05ODk1LWM1MGJhZDM4ZjRjYSIsIm9uY2UiOmZhbHNlLCJzY29wZSI6InVzZXIiLCJ0ZW5hbnRJZCI6Ijc1OTQzMDk0LWYxNzQtNDY0Zi1hYjU5LWJmMTRiODg3NGNjYSIsInRlbmFudEtleSI6Ik15Q2FyZCIsInRyYW5zYWN0aW9uIjpudWxsLCJzZXNzaW9uSWQiOm51bGwsImVtYWlsIjoia2V2aW4ubGlvdUBzb2Z0LXdvcmxkLmNvbS50dyJ9.PupMZk3ZyN-EZezyreKf5mTU47ciDwxWDHZzoaRM2zc35t62sjgQhrrifBGur_yo0PYM5nKQ4Gcc2MtnijFSATEMiOSLvoZpvrjoyKml6Wcz0qEN07jcAyk6VVYbgCqFgP_Tf6FnIvYSMobt1BcRtNvZnIfY4BjBiPECRf21_JHNFfOZVvhuHASZ05TxdfNJF6WQcOE-wkPET1iOtgBCuUkGOg2nZFpRHQ65-dMLcte6p_yGlXkuPnLcGLhCXK5ZxUDc5IjLzfgHWxtDmDy3iuZAOL0gVb_vIbq0njjl0QDAh3mtX8s2_4eBRZPQVY84V2XKl1gYr7oJ2ror0TOTN4kNFY5XOKZYbfm_Wbh3Q7RWLhtyiUHSlhwdPvCNjFRDHU2WHPce2V6Y6gUzqxQRStuVyI2H80g4TaBuQlWetBkATjJpzSpBBnUPHw3-_M0xSzw10VhHXUN-3x2wdAYnz0CZxRZBFOx-qDpYbj7NewAp7rOt2Z8dGrn5yRHtcUylIyTiusV8-FSeeon_Ed0veBw2N1qcItBLNjhcNJsl2P6Rlb01iBJR_bf209bZEbYRU4CWeV00ytbrnOlO4oC-E4pM9XiSTSQzgsE9F1nQEMLR8dWfkIvbU92NRDy_FCpF4panVf7Sab5G948_2ROU5OO2HTRRDFZx9agif6ZGA8M' \ -H 'content-type: application/json' \ -H 'cookie: _ga_0LHGEZ6BMH=GS1.1.1703755073.1.0.1703755082.51.0.0; _ga_CPEG9ST3MJ=GS1.1.1709877057.1.1.1709877121.0.0.0; _ga_RL00X9D20B=GS1.1.1709884511.2.0.1709884511.0.0.0; _ga_CV36KLRLC5=GS1.2.1710382586.2.0.1710382586.0.0.0; _ga_R9559Q3WPK=GS1.1.1710382586.2.1.1710382680.0.0.0; _ga_CKVXXJKYYP=GS1.1.1715760726.3.0.1715760726.0.0.0; _ga_LW8BE3J7DN=GS1.1.1716887023.7.1.1716887821.0.0.0; _ga=GA1.1.1664159217.1703755070; _ga_3NC7MLJ8DD=GS1.1.1717404692.16.0.1717405318.0.0.0; _ga_4ZQQXSH36G=GS1.1.1717404692.13.0.1717405318.0.0.0; _ga_4V1XCWQRTN=GS1.1.1717404692.15.0.1717405318.0.0.0' \ -H 'origin: https://fido.mycard520.com' \ -H 'priority: u=1, i' \ -H 'referer: https://fido.mycard520.com/test' \ -H 'sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-origin' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' \ --data-raw '{"response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiaTF0Q0cwQ04tN1NaM05tSmJka0FxWkxPanlrTkFVbjdNX1N6VkZKVFhyNCIsIm9yaWdpbiI6Imh0dHBzOi8vZmlkby5teWNhcmQ1MjAuY29tIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ==","attestationObject":"o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViYXcNeBx1lSNvFKB55wk9RJ3q2MbERif24WLHq5owCJ71dAAAAAPv8MAcVTk7MjAtuAgVX170AFNbDeBig6-8d9B6Jf_ULTvilfxK3pQECAyYgASFYIOyEhY8SRGCzxiUNHGUYV972dfBRMUYVZcrQhC4xhRpLIlgg6r2kyv4LAoOBBxrwF25-lK6VZff3SRa1JZLhfDIfuMc="},"id":"1sN4GKDr7x30Hol_9QtO-KV_Erc","type":"public-key","rawId":"1sN4GKDr7x30Hol_9QtO-KV_Erc="}' ``` 參數 ```jsonld= { "response": { "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uY3JlYXRlIiwiY2hhbGxlbmdlIjoiaTF0Q0cwQ04tN1NaM05tSmJka0FxWkxPanlrTkFVbjdNX1N6VkZKVFhyNCIsIm9yaWdpbiI6Imh0dHBzOi8vZmlkby5teWNhcmQ1MjAuY29tIiwiY3Jvc3NPcmlnaW4iOmZhbHNlfQ==", "attestationObject": "o2NmbXRkbm9uZWdhdHRTdG10oGhhdXRoRGF0YViYXcNeBx1lSNvFKB55wk9RJ3q2MbERif24WLHq5owCJ71dAAAAAPv8MAcVTk7MjAtuAgVX170AFNbDeBig6-8d9B6Jf_ULTvilfxK3pQECAyYgASFYIOyEhY8SRGCzxiUNHGUYV972dfBRMUYVZcrQhC4xhRpLIlgg6r2kyv4LAoOBBxrwF25-lK6VZff3SRa1JZLhfDIfuMc=" }, "id": "1sN4GKDr7x30Hol_9QtO-KV_Erc", "type": "public-key", "rawId": "1sN4GKDr7x30Hol_9QtO-KV_Erc=" } ``` 回傳 ```jsonld= {"success":true} ``` ### 3.驗證FIDO-第一支 ```bash= curl 'https://fido.mycard520.com/api/webauthn/MyCard/authentication/initialize' \ -H 'accept: */*' \ -H 'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6' \ -H 'content-type: application/json' \ -H 'cookie: _ga_0LHGEZ6BMH=GS1.1.1703755073.1.0.1703755082.51.0.0; _ga_CPEG9ST3MJ=GS1.1.1709877057.1.1.1709877121.0.0.0; _ga_RL00X9D20B=GS1.1.1709884511.2.0.1709884511.0.0.0; _ga_CV36KLRLC5=GS1.2.1710382586.2.0.1710382586.0.0.0; _ga_R9559Q3WPK=GS1.1.1710382586.2.1.1710382680.0.0.0; _ga_CKVXXJKYYP=GS1.1.1715760726.3.0.1715760726.0.0.0; _ga_LW8BE3J7DN=GS1.1.1716887023.7.1.1716887821.0.0.0; _ga=GA1.1.1664159217.1703755070; _ga_3NC7MLJ8DD=GS1.1.1717404692.16.0.1717405318.0.0.0; _ga_4ZQQXSH36G=GS1.1.1717404692.13.0.1717405318.0.0.0; _ga_4V1XCWQRTN=GS1.1.1717404692.15.0.1717405318.0.0.0' \ -H 'origin: https://fido.mycard520.com' \ -H 'priority: u=1, i' \ -H 'referer: https://fido.mycard520.com/test' \ -H 'sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-origin' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' \ --data-raw '{"transaction":""}' ``` 回傳 ```jsonld= { "publicKey": { "challenge": "vnFIeHdsdm-Wxt3d4vXyx2Y_8QrCkiM2cwKtsGBbXj4", "timeout": 300000, "rpId": "fido.mycard520.com", "userVerification": "preferred" } } ``` ### 4.驗證FIDO-第二支 ```bash= curl 'https://fido.mycard520.com/api/webauthn/MyCard/authentication/finalize' \ -H 'accept: */*' \ -H 'accept-language: zh-TW,zh;q=0.9,en-US;q=0.8,en;q=0.7,zh-CN;q=0.6' \ -H 'content-type: application/json' \ -H 'cookie: _ga_0LHGEZ6BMH=GS1.1.1703755073.1.0.1703755082.51.0.0; _ga_CPEG9ST3MJ=GS1.1.1709877057.1.1.1709877121.0.0.0; _ga_RL00X9D20B=GS1.1.1709884511.2.0.1709884511.0.0.0; _ga_CV36KLRLC5=GS1.2.1710382586.2.0.1710382586.0.0.0; _ga_R9559Q3WPK=GS1.1.1710382586.2.1.1710382680.0.0.0; _ga_CKVXXJKYYP=GS1.1.1715760726.3.0.1715760726.0.0.0; _ga_LW8BE3J7DN=GS1.1.1716887023.7.1.1716887821.0.0.0; _ga=GA1.1.1664159217.1703755070; _ga_3NC7MLJ8DD=GS1.1.1717404692.16.0.1717405318.0.0.0; _ga_4ZQQXSH36G=GS1.1.1717404692.13.0.1717405318.0.0.0; _ga_4V1XCWQRTN=GS1.1.1717404692.15.0.1717405318.0.0.0' \ -H 'origin: https://fido.mycard520.com' \ -H 'priority: u=1, i' \ -H 'referer: https://fido.mycard520.com/test' \ -H 'sec-ch-ua: "Not/A)Brand";v="8", "Chromium";v="126", "Google Chrome";v="126"' \ -H 'sec-ch-ua-mobile: ?0' \ -H 'sec-ch-ua-platform: "macOS"' \ -H 'sec-fetch-dest: empty' \ -H 'sec-fetch-mode: cors' \ -H 'sec-fetch-site: same-origin' \ -H 'user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' \ --data-raw '{"response":{"clientDataJSON":"eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoidm5GSWVIZHNkbS1XeHQzZDR2WHl4MllfOFFyQ2tpTTJjd0t0c0dCYlhqNCIsIm9yaWdpbiI6Imh0dHBzOi8vZmlkby5teWNhcmQ1MjAuY29tIiwiY3Jvc3NPcmlnaW4iOmZhbHNlLCJvdGhlcl9rZXlzX2Nhbl9iZV9hZGRlZF9oZXJlIjoiZG8gbm90IGNvbXBhcmUgY2xpZW50RGF0YUpTT04gYWdhaW5zdCBhIHRlbXBsYXRlLiBTZWUgaHR0cHM6Ly9nb28uZ2wveWFiUGV4In0=","authenticatorData":"XcNeBx1lSNvFKB55wk9RJ3q2MbERif24WLHq5owCJ70dAAAAAA==","signature":"MEUCIE0YJdJC1xg3i1JdNYT3MFbqUYKBamGF7oj-bQvhufAQAiEA4h7eE-9vAG1IwxbRkm8FZDQIN5ctR2jBs_KFpHhaRNo=","userHandle":"OTdjMjQxZjUtNWY5OC00Y2YzLTgyYjUtOTg4NGQxNzJmNmYx"},"id":"1sN4GKDr7x30Hol_9QtO-KV_Erc","type":"public-key","rawId":"1sN4GKDr7x30Hol_9QtO-KV_Erc="}' ``` 參數 ```jsonld= { "response": { "clientDataJSON": "eyJ0eXBlIjoid2ViYXV0aG4uZ2V0IiwiY2hhbGxlbmdlIjoidm5GSWVIZHNkbS1XeHQzZDR2WHl4MllfOFFyQ2tpTTJjd0t0c0dCYlhqNCIsIm9yaWdpbiI6Imh0dHBzOi8vZmlkby5teWNhcmQ1MjAuY29tIiwiY3Jvc3NPcmlnaW4iOmZhbHNlLCJvdGhlcl9rZXlzX2Nhbl9iZV9hZGRlZF9oZXJlIjoiZG8gbm90IGNvbXBhcmUgY2xpZW50RGF0YUpTT04gYWdhaW5zdCBhIHRlbXBsYXRlLiBTZWUgaHR0cHM6Ly9nb28uZ2wveWFiUGV4In0=", "authenticatorData": "XcNeBx1lSNvFKB55wk9RJ3q2MbERif24WLHq5owCJ70dAAAAAA==", "signature": "MEUCIE0YJdJC1xg3i1JdNYT3MFbqUYKBamGF7oj-bQvhufAQAiEA4h7eE-9vAG1IwxbRkm8FZDQIN5ctR2jBs_KFpHhaRNo=", "userHandle": "OTdjMjQxZjUtNWY5OC00Y2YzLTgyYjUtOTg4NGQxNzJmNmYx" }, "id": "1sN4GKDr7x30Hol_9QtO-KV_Erc", "type": "public-key", "rawId": "1sN4GKDr7x30Hol_9QtO-KV_Erc=" } ``` 回傳 ```jsonld= { "success": true, "data": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJodHRwczovL015Q2FyZCxmaWRvLm15Y2FyZDUyMC5jb20iLCJzdWIiOiI5N2MyNDFmNS01Zjk4LTRjZjMtODJiNS05ODg0ZDE3MmY2ZjEiLCJleHAiOjMzMjc1ODg2MzY1LCJpYXQiOjE3MTg5MzQzNjUsImp0aSI6IjRkYTlkYzAwLTU2ZjItNGNlNS05YjgxLTA1NDk5YmM1Nzk4MiIsIm9uY2UiOnRydWUsInNjb3BlIjoidXNlciIsInRlbmFudElkIjoiNzU5NDMwOTQtZjE3NC00NjRmLWFiNTktYmYxNGI4ODc0Y2NhIiwidGVuYW50S2V5IjoiTXlDYXJkIiwidHJhbnNhY3Rpb24iOiIiLCJzZXNzaW9uSWQiOiIzNTMyNDllNC02YTRlLTRhMTgtOTliNS03MWI5MGY5NjIzOGYiLCJlbWFpbCI6ImtldmluLmxpb3VAc29mdC13b3JsZC5jb20udHcifQ.ZohNHaGG-Z7olsNWWa5c_VPxFARewSuVFx1fdMeX0fQX5LLGVYkf-q46sURYlIE6bbL9BDJFsVoo5FCy8UzjtOoU9TPfuxsvqDVYfK6XZgntl-QfHS_0GrW_x3TgMows5r6IYkeNSZbE1X1JksMnwj6OnzprApCzjdnv32xtmLZ0ygUd-ToKMHYfZccOK4mNWUaXu2TBfOJmZBeRLnXhBmA8QJRLsuLYejoG3Zr2TWqM_2vRWcrz6Ab6GlUdG7O8XbOUYg0KUpSZJ3GvLbAWCpNvB2LbaG6LeicU8h7jMffJ8sCkt3xf0b8KQfcF1IRd77dSFG0XFKfOeV9p2cXqrWU2uuiMNLIZthPd_qzXIyGcKXGTgbzkuG0dK0m5-KMy6apW8klt04_FVm_X6ZTgmf9qcpkDqCTKCsfrc3pT8MjsrvKUIxLpjkGzHfzZWsW5_c3X5TSZXMmz2OAT00CHcjd3NiqL9twlVAM9TFMBkKTvzdsAqEmNWzT9hjwfdgVKCbiU7LJ2njSlWpvF1nwQ8nM6ANdBhw5kBVB2UvLEtDU6ukxzPgfWgoEdcLtyqLYC4Z1NRW-Q-HqZBnKBguHp0DN9Bg3Be5Xp-kNUezxA3bPRCrizmz3qN6WvTUl6d9qFtIKJek7R_eurY692Vm2RmMs_EBTu110xKsjsVRd1mZk" } ```