Google Cloud CDN подписал файлы cookie с ведром в качестве бэкэнда - PullRequest
0 голосов
/ 23 апреля 2020

В качестве альтернативы подписанных 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 и когда он не является:

Signed Cookie attached Without signed cookie

Похоже, что повар ie "Cloud-CDN-Cook ie "только что передается через Cloud CDN и прямо в серверную часть, где игнорируется и tandard response Отказано в доступе.

В журналах облачной платформы нет вмешательства cdn.

С Cook ie присоединено with cookie attached Нет Cook ie присоединено without cookie attached

Есть ли что-то в реализации подписи или создании и использовании повара ie, что я делаю неправильно?

1 Ответ

0 голосов
/ 25 апреля 2020

В моем проекте Google еще не была включена функция подписанного повара ie. Другой пользователь обратился в службу поддержки, и как только проблема была решена для него, она была решена для меня без изменений в коде, и это работает.

Это мой последний nodejs (машинописный текст) подписанный повар ie реализация.

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;
}
...