17

knox nodejs-library を使用して、webapp (nodejs) で署名付き URL を生成しています。ただし、リクエストごとに、現在のユーザーに対して一意の GET 署名付き URL を再生成する必要があり、ブラウザーのキャッシュ制御をゲームから除外するという問題が発生します。

ブラウザは完全なURLをキャッシュキーとして使用しているように見えるため、成功せずにWebを検索しました。そのため、特定の状況(nodejs、knoxライブラリ)で問題を解決し、キャッシング制御を使用しながら、どのようにできるか非常に興味がありますユーザーのアクセス権を確認する必要があるため、すべてのリクエストに対して署名付き URL を生成します。

しかし、それに対する解決策がないなんて信じられません。

4

4 に答える 4

2

S3 で CloudFront を使用する場合、カスタム ポリシーを使用できます。各 URL をユーザーの IP に制限し、タイムアウトを適度に長くすると、ユーザーが同じコンテンツを再度リクエストしたときに同じ URL を取得するため、ブラウザーが取得されます。コンテンツをキャッシュできますが、URL は (別の IP 上の) 他のユーザーには機能しません。

(参照: http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-creating-signed-url-custom-policy.html )

于 2013-10-25T07:40:58.237 に答える
2

@semir-deljićの回答を展開しています。

関数を呼び出すたびにgetSignedUrl、新しい URL が生成されます。これにより、Cache Controlヘッダーが存在する場合でも画像がキャッシュされなくなります。

したがって、タイムキーパー ライブラリを使用して時間を凍結します。これで、関数が呼び出されると、時間が経過していないと見なされ、同じ URL が返されます。

const moment = require('moment');
const tk = require("timekeeper");

function url4download(awsPath, awsKey) {

  function getFrozenDate() {
    return moment().startOf('week').toDate();
  }

  // Paramters for getSignedUrl function
  const params = {
    // Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html
    // Ref: https://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
    Bucket: awsBucket,
    Key: `${awsPath}/${awsKey}`,
    // 604800 == 7 days
    ResponseCacheControl: `public, max-age=604800, immutable`,
    Expires: 604800, // 7 days is max
  };

  const url = tk.withFreeze(getFrozenDate(), () => {
    return S3.getSignedUrl('getObject', params);
  });
  return url;
}

注: を使用moment().toDate()すると、タイムキーパーにはネイティブの日付オブジェクトが必要になるためです。

ライブラリを使用するための質問は難しいですがknox、私の答えはawsの公式ライブラリを使用しています。

// This is how the AWS & S3 is initiliased.
const AWS = require('aws-sdk');

const S3 = new AWS.S3({
  accessKeyId: awsAccessId,
  secretAccessKey: awsSecretKey,
  region: 'ap-south-1',
  apiVersion: '2006-03-01',
  signatureVersion: 'v4',
});

インスピレーション: https://advancedweb.hu/cacheable-s3-signed-urls/

于 2021-01-26T11:04:34.917 に答える