В качестве альтернативы подписанных URL-адресов с префиксом url, я пытаюсь заставить подписанных файлов cookie работать. В Google Cloud CDN настроена внутренняя корзина, настроенная и работающая для стандартных подписанных URL-адресов.
Используя эти Go примеры Я реализовал функцию подписи cook ie в nodejs (машинописный текст), который при получении данных тестового образца дает ожидаемый результат.
export function signCookie(urlPrefix: any, keyName: string, key: any, experation: Date): string {
// Base64url encode the url prefix
const urlPrefixEncoded = Buffer.from(urlPrefix)
.toString('base64')
.replace(/\+/g, '-')
.replace(/\//g, '_');
// Input to be signed
const input = `URLPrefix=${urlPrefixEncoded}:Expires=${experation.getTime()}:KeyName=${keyName}`;
// Create bytes from given key string.
const keyBytes = Buffer.from(key, 'base64');
// Use key bytes and crypto.createHmac to produce a base64 encoded signature which is then escaped to be base64url encoded.
const signature = createHmac('sha1', keyBytes)
.update(input)
.digest('base64').replace(/\+/g, '-')
.replace(/\//g, '_');
// Adding the signature on the end if the cookie value
const signedValue = `${input}:Signature=${signature}`;
return signedValue;
}
Когда я затем использую ту же функцию для получения значений ie со знаком для моего фактический экземпляр cdn Я получаю следующее (имя ключа и префикс URL не соответствуют действительности):
URLPrefix = aHR0cHM6L ------------------ HdhcmUuaW8v: срок действия истекает = 1587585646437: KeyName = my-key-name: Signature = 2mJbbtYVclycXBGIpKzsJWuLXEA =
Создание приготовления с использованием инструментов firefox dev Я получаю следующие два результата, когда прикреплен повар ie и когда он не является:
![Without signed cookie](https://i.stack.imgur.com/ZgurB.jpg)
Похоже, что повар ie "Cloud-CDN-Cook ie "только что передается через Cloud CDN и прямо в серверную часть, где игнорируется и tandard response Отказано в доступе.
В журналах облачной платформы нет вмешательства cdn.
С Cook ie присоединено
Нет Cook ie присоединено ![without cookie attached](https://i.stack.imgur.com/LQF2r.jpg)
Есть ли что-то в реализации подписи или создании и использовании повара ie, что я делаю неправильно?