1. Verwenden Sie AWS Amplify oder AWS SDK für den Browser
Wenn Sie diese Aktion im Browser ausführen müssen, besteht eine Lösung darin, AWS Amplify oder eine Kombination davon zu verwenden Dienste, die eine browserbasierte Interaktion ermöglichen, ohne dass eine private Schlüsselverwaltung im Browser erforderlich ist.Das Signieren von URLs sollte jedoch im Allgemeinen nicht direkt im clientseitigen Code erfolgen, da dadurch Ihre privaten Schlüssel offengelegt werden Schlüssel, was ein Sicherheitsrisiko darstellt. Stattdessen sollten Sie diesen Vorgang serverseitig durchführen und dann die signierte URL an den Client übergeben.
Code: Select all
const configureAWS = () => {
const {AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_REGION} = config;
AWS.config.update({
accessKeyId: AWS_ACCESS_KEY_ID,
secretAccessKey: AWS_SECRET_ACCESS_KEY,
region: AWS_REGION,
});
};
export const AwsDownloadWithSignedUrlVideo = async (
bucketName,
key,
Expires = 60,
) => {
try {
configureAWS(); // Ensure AWS is configured
const {
CLOUDFRONT_URL,
CLOUDFRONT_KEY_PAIR_ID,
CLOUDFRONT_PRIVATE_KEY_PATH,
} = Config;
const cloudFrontUrl = `${CLOUDFRONT_URL}/${key}`;
const cloudFront = new AWS.CloudFront.Signer(
CLOUDFRONT_KEY_PAIR_ID,
CLOUDFRONT_PRIVATE_KEY_PATH,
);
const signedUrlCloudFront = cloudFront.getSignedUrl({
url: cloudFrontUrl,
expires: Math.floor(Date.now() / 1000) + Expires,
});
return signedUrlCloudFront;
} catch (error) {
console.error('Error generating signed URL for video from S3:', error);
return null;
}
};