Autorisez les requêtes en générant une URL présignée. Une URL présignée constitue une alternative à l'utilisation du champ Authorization dans l'en-tête d'une requête HTTP. Elle contient une signature ainsi que d'autres informations de requête nécessaires. Cette méthode permet d'accorder un accès temporaire aux ressources Object Storage Service (OSS) à un tiers pour une période donnée, sans exposer vos identifiants d'accès. Cette rubrique décrit comment inclure une signature V1 dans une URL.
OSS prend en charge l'algorithme de signature V4, plus sécurisé. Utilisez les signatures V4 pour améliorer la sécurité. Pour plus d'informations, consultez la section Signatures V4.
Implémentation de la signature via le SDK
Les SDK OSS implémentent automatiquement les signatures V1. Vous n'avez pas besoin de gérer les signatures lorsque vous utilisez un SDK OSS. Pour comprendre l'implémentation de la signature pour un langage spécifique, consultez le code source du SDK. Le tableau suivant répertorie les fichiers qui implémentent la signature pour chaque SDK.
|
SDK |
Implémentation de la signature |
Exemple d'utilisation |
|
Java |
||
|
PHP |
||
|
Node.js |
||
|
Browser.js |
||
|
Python |
||
|
Android |
||
|
iOS |
||
|
Go |
||
|
C++ |
||
|
C |
||
|
.Net |
||
|
Ruby |
Remarques sur l'utilisation
Si vous utilisez une URL signée, les données autorisées sont exposées sur Internet jusqu'à l'expiration de l'URL. Évaluez les risques avant d'utiliser cette méthode.
OSS ne permet pas d'inclure des signatures à la fois dans l'URL et dans l'en-tête de la requête simultanément.
Générez une URL présignée pour une opération PUT afin de garantir que le contenu correct est chargé. Lorsqu'un SDK présigne une requête, il calcule la somme de contrôle MD5 du corps de la requête et l'inclut dans l'URL présignée. L'utilisateur doit charger un contenu dont la somme de contrôle MD5 correspond à celle figurant dans l'URL présignée. Sinon, l'opération échoue. Pour valider la somme MD5, ajoutez l'en-tête Content-MD5 à la requête.
Implémentation de la signature
-
Exemple de signature
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****Si vous utilisez un utilisateur Security Token Service (STS) pour construire une URL signée, vous devez inclure le paramètre
security-token.https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2p***********&Expires=1141889120&Signature=****Pxyb****mGa%****272YEAiv****&security-token=CAIS****q6Ft5B2yfSjIr****Oz31blR9oWmWBf****DR/xm3Imc****IHxMdHJsCeAcs/Q0lGFR5/sflqJIR****EvCUcZr8szfWcsZos2****u5Jko1be0ewHKeQKZsebWZ+LmNpy/Ht6md1HDkAJq3LL+bk/Mdle5MJqP+/kFC9MMRVuAcCZhDtVbLRcYgq18D3bKMuu3ORPHm3fZCFES2jBxkmRi86+ysIP+phPVlw/90fRH5dazcJW0Zsx0OJo6Wcq+3+FqM6DQlTNM6hwNtoUO1fYUommb54nDXwQIvUjfbtC5qIM/cFVLAYEhAL****TGkvl1h/fejYyfyW****kFCHiPF****JCUSbr4a4sjF6zyPnPWycyCLYXleLzhxPWd/2kagAGaXG69BqwYNvrKKI3W8****bNc1wQDMXQfiHpFCRG6lYhh3****pwH90A3sTlxzRGvi8+****JwrluOHWs+Fj6S6s0cOhKvKRWYE8UuWeXIvv4l6DAGwH****LjLC11f5prUJ****b+3hwuBod32Jx+us/1p996Glao725orcb****Ajoutez une adresse IP spécifique, une plage d'adresses IP ou un ID VPC à l'URL signée pour empêcher les clients non autorisés d'accéder aux ressources OSS.
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?&OSSAccessKeyId=44CF****************&Expires=1475462111&Signature=77Dv****************&x-oss-ac-subnet-mask=32 -
Paramètres
Nom
Type
Obligatoire
Description
OSSAccessKeyId
String
Oui
L'ID AccessKey utilisé dans la signature de l'URL.
Expires
Number
Oui
L'heure d'expiration de l'URL au format . Unix time représente le nombre de secondes écoulées depuis le 1er janvier 1970 à 00:00:00 UTC. Si OSS reçoit la requête après l'heure d'expiration, il renvoie un code d'erreur de délai dépassé. Par exemple, si l'heure actuelle est 1141889060 et que vous souhaitez créer une URL expirant dans 60 secondes, définissez Expires sur 1141889120.
RemarquePour des raisons de sécurité, la durée de validité par défaut d'une URL dans la console OSS est de 3 600 secondes. La durée de validité maximale est de 32 400 secondes. Pour plus d'informations sur la modification de la durée d'expiration de l'URL, consultez la section Utilisation des URL de fichier.
Signature
String
Oui
Les informations de signature. Le format est le suivant :
Signature = urlencode(base64(hmac-sha1(AccessKeySecret, VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + EXPIRES + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource)))-
L'algorithme de signature dans une URL est similaire à l'algorithme d'inclusion d'une signature dans l'en-tête pour toutes les requêtes OSS prises en charge et les paramètres d'en-tête.
-
Lorsque vous calculez la chaîne de signature à ajouter à une URL, les en-têtes définis dans la signature V1, tels que
CONTENT-TYPE,CONTENT-MD5etCanonicalizedOSSHeaders, sont identiques à ceux utilisés pour calculer la signature ajoutée à l'en-tête Authorization. Toutefois, vous devez remplacer le paramètre Date par le paramètre Expires dans la chaîne de signature. Vous pouvez inclure l'en-tête Date dans la requête, mais il n'est pas nécessaire de l'inclure dans la chaîne de signature. -
Vous devez encoder l'URL de la signature lorsque vous l'incluez dans une URL. Si Signature, Expires ou OSSAccessKeyId sont transmis plusieurs fois dans l'URL, seule la première valeur est utilisée.
-
Lorsqu'une URL signée est utilisée, OSS vérifie d'abord si l'heure de la requête est postérieure à l'heure Expires, puis valide la signature.
security-token
String
Non
Le jeton de sécurité. Définissez ce paramètre uniquement lorsque vous utilisez un utilisateur STS pour construire l'URL signée.
RemarquePour plus d'informations sur la configuration du service STS, consultez la section Utilisation des identifiants d'accès temporaires de STS pour accéder à OSS. Vous pouvez obtenir des identifiants d'accès temporaires en appelant l'opération API STS AssumeRole ou en utilisant les SDK STS pour différents langages. Les identifiants d'accès temporaires comprennent une paire AccessKey temporaire (ID AccessKey et secret AccessKey) et un jeton de sécurité (SecurityToken).
x-oss-ac-source-ip
String
Non
Spécifie l'adresse IP ou la plage d'adresses IP.
Important-
Ce paramètre est utilisé uniquement lors de la génération de la signature. Vous n'avez pas besoin d'inclure ce paramètre dans l'URL.
-
Si vous ajoutez une adresse IP ou une plage d'adresses IP lors de la génération de la signature, vous devez également transmettre le paramètre x-oss-ac-subnet-mask pour spécifier le masque de sous-réseau.
x-oss-ac-subnet-mask
Number
Non
Le nombre de bits à 1 dans le masque de sous-réseau. Si la requête inclut ce paramètre, OSS effectue une opération ET binaire entre l'adresse IP réelle de la requête et le masque de sous-réseau. Le résultat est utilisé pour vérifier la signature. Si ce paramètre est falsifié, la validation de la signature échoue.
x-oss-ac-vpc-id
String
Non
Spécifie l'ID VPC. Après avoir spécifié ce paramètre, OSS détermine si la requête provient de l'ID VPC correspondant. Si la requête provient de l'ID VPC spécifié et que ce paramètre est défini, OSS valide à la fois l'ID VPC et l'adresse IP source ou la plage d'adresses IP.
x-oss-ac-forward-allow
Boolean
Non
Indique s'il faut autoriser les requêtes transférées. Si OSS détecte ce champ et que la requête contient
X-Forwarded-For, qui peut contenir plusieurs adresses IP, OSS utilise la valeur deX-Forwarded-Forpour valider la signature.Les valeurs suivantes sont valides :
-
true : Autorise les requêtes transférées.
ImportantDéfinir cette valeur sur true crée un risque de falsification ou de détournement de l'en-tête de requête.
-
false (par défaut) : N'autorise pas les requêtes transférées.
-
-
Exemple de code Python pour la signature (incluant uniquement les paramètres obligatoires)
import base64 import hmac import hashlib from urllib.parse import quote access_key_secret = "yourAccessKeySecret" string_to_sign = "GET\n\n\n1141889120\n/examplebucket/oss-api.pdf" h = hmac.new( access_key_secret.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha1 ) signature = quote(base64.b64encode(h.digest()).decode('utf-8')) print(signature)
Codes d'erreur
|
Code d'erreur |
Message renvoyé |
Description |
|
AccessDenied |
403 Forbidden |
Les paramètres Signature, Expires et OSSAccessKeyId sont obligatoires. L'ordre des paramètres n'a pas d'importance. |
|
AccessDenied |
403 Forbidden |
La requête est reçue après l'heure spécifiée dans le paramètre Expires, ou le format de l'heure est incorrect. |
|
InvalidArgument |
400 Bad Request |
Au moins un des paramètres Signature, Expires et OSSAccessKeyId est inclus dans l'URL, et les informations de signature sont également incluses dans l'en-tête de requête Authorization. |