En-tête d'autorisation OAuth 2.0

91

Je souhaite développer un SDK qui encapsule les fonctions OAuth 2.0. J'ai vérifié les différences entre OAuth 1.0 et 2.0, et j'ai une certaine confusion sur l'en-tête d'autorisation ( 1.0 et 2.0 ), les paramètres du protocole OAuth 1.0 peuvent être transmis à l'aide de l'en-tête HTTP "Authorization", mais je ne trouve pas cela décrit dans le courant Brouillon OAuth 2.0.

OAuth 2.0 prend-il en charge les en-têtes d'autorisation?

Dans OAuth 1.0, votre en-tête ressemblerait à ceci:

Authorization: OAuth realm="Example",
    oauth_consumer_key="0685bd9184jfhq22",
    oauth_token="ad180jjd733klru7",
    oauth_signature_method="HMAC-SHA1",
    oauth_signature="wOJIO9A2W5mFwDgiDvZbTSMK%2FPY%3D",
    oauth_timestamp="137131200",
    oauth_nonce="4572616e48616d6d65724c61686176",
    oauth_version="1.0"
JKhuang
la source
Vous ne répondez pas à votre question, mais il existe déjà un certain nombre de bibliothèques OpenId et OAuth, êtes-vous sûr de vouloir réinventer la roue?
Kane
Salut Kane, je ne développe pas de SDK pour OAuth, j'ai juste besoin d'une fonction OAuth dans mon SDK, donc je ne veux pas introduire de bibliothèque tierce.
JKhuang

Réponses:

205

Pour ceux qui recherchent un exemple de la façon de transmettre l'autorisation OAuth2 (jeton d'accès) dans l'en-tête (par opposition à l'utilisation d'une requête ou d'un paramètre de corps), voici comment procéder:

Authorization: Bearer 0b79bab50daca910b000d4f1a2b675d604257e42
Jonathan
la source
32
Pour tous ceux qui sont tombés sur ce fil en essayant d'utiliser l'en-tête d'autorisation avec cURL, voici la commande: curl -H "Authorization: Bearer $ACCESS_TOKEN" URI
Blake G
5
Question rapide, car je continue à voir des réponses comme celle-ci, mais sans la clarification: si je fais cela dans le code (via l'API HTTPRequest), j'ajoute des en-têtes à ma demande avec un nom d'en-tête et un champ de données associé. Dans cette réponse, quelle partie est le nom de l'en-tête, et quelles données? Autrement dit, l'en-tête est-il Authorization: Beareren 0b...42tant que données, ou l'en-tête est-il Authorization:en Bearer 0b...42tant que données, ou quoi? Merci! (Btw, je suis Oauth2, si ça compte.)
Olie
9
Authorizationest le nom de l'en-tête, les deux points séparent le nom de la valeur dans tous les en-têtes selon la section 4.2 de la RFC2616 .
Rick Mac Gillis
35

Vous pouvez toujours utiliser l'en-tête Authorization avec OAuth 2.0. Il existe un type de support spécifié dans l'en-tête d'autorisation à utiliser avec les jetons de support OAuth (ce qui signifie que l'application cliente doit simplement présenter ("porter") le jeton). La valeur de l'en-tête est le jeton d'accès que le client a reçu du serveur d'autorisation.

Il est documenté dans cette spécification: https://tools.ietf.org/html/rfc6750#section-2.1

Par exemple:

   GET /resource HTTP/1.1
   Host: server.example.com
   Authorization: Bearer mF_9.B5f-4.1JqM

mF_9.B5f-4.1JqM est votre jeton d'accès OAuth.

Scott T.
la source
OAuth 2.0 documente deux types de jetons d'accès comme exemples: Bearer et MAC ( tools.ietf.org/html/rfc6749#section-7.1 )
Clauds
1
Malheureusement, MAC n'a jamais été entièrement standardisé (voir le projet de spécification expiré: tools.ietf.org/html/draft-ietf-oauth-v2-http-mac-05 ) et n'est pas utilisé dans la pratique.
Scott T.