Open Authorization Framework
Permite a aplicaciones de terceros obtener acceso limitado a recursos HTTP, en nombre del dueño del recurso a través de su autorización o bien permitiendo a la aplicación el acceso directamente en su nombre.
user credentials
user credentials
facebook user profile info
OAuth define cuatro roles:
Resource
Owner
Authorization Server
Resource Server
Client
Authorization Request
Authorization Grant
Access Token
Access Token
Protected Resource
Authorization Grant
OAuth define cuatro flujos que determinan como el cliente obtendrá autorización:
Este flujo esta optimizado para clientes confidenciales.
Las credenciales del resource owner nunca se comparten con el client, porque este se autentica a través del user-agent directamente contra el authorization server.
El access token es recibido directamente por client sin pasar por el user-agent del resource owner.
Resource
Owner
Authorization Server
User-Agent
Client Identifier & Redirection URI
Access Token
Client
User authenticates
Authorization Code
Authorization Code & Client Credentials
-- (A) --
-- >
-- >
-- (B) --
-- (C) --
<--
-- (D) --
-- >
-- (E) --
<--
|
(B)
|
|
(A)
|
|
(C)
|
v
^
Login & authorization page
--
<--
v
response_type (requerido): debe ser "code".
client_id (requerido): el identificador del cliente.
redirect_uri (opcional): uri donde el user-agent será redirigido una vez autenticado el resource owner y autorizado el client.
scope (opcional): especifica sobre que grupo de recursos se esta pidiendo autorización.
state (recomendado): un valor autogenerado utilizado por el cliente para mantener estado entre el request y el response. Su objetivo es evitar ataques del tipo CSRF.
Authorization Request Example
GET
Host: api.facebook.com
/v1/oauth/authorize?response_type=code&client_id=s6BhdRkqt3
&state=12fsd3&scope=email&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Authorization Response Example
HTTP/1.1 302 Found
Location: https://client.example.com/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=12fsd3
grant_type (requerido): debe ser "authorization_code".
client_id (requerido): el identificador del cliente.
client_secret (requerido): la contraseña del cliente.
redirect_uri (requerido): si este parámetro fue utilizado en la obtención del authorization code.
Access Token Request Example
POST
Host: api.facebook.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
/v1/oauth/access-token?grant_type=authorization_code&code=SplxlOBeZQQYbYS6WxSbIA
&client_id=s6BhdRkqt3&client_secret=ñladfj3m1j&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Access Token Response Example
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}
Este flujo esta optimizado para clientes públicos.
El cliente no se autentica en el authorization server.
El cliente obtiene el access token directamente como resultado del authorization request.
Resource
Owner
Authorization Server
User-Agent
Client Identifier & Redirection URI
Client
User authenticates
Redirection URI with Access Token in Fragment
-- (A) --
-- >
-- >
-- (B) --
-- (C) --
<--
|
(B)
|
Login & authorization page
--
<--
v
response_type (requerido): debe ser "token".
client_id (requerido): el identificador del cliente.
redirect_uri (opcional): uri donde el user-agent será redirigido una vez autenticado el resource owner y autorizado el client.
scope (opcional): especifica sobre que grupo de recursos se esta pidiendo autorización.
state (recomendado): un valor autogenerado utilizado por el cliente para mantener estado entre el request y el response. Su objetivo es evitar ataques del tipo CSRF.
Authorization Request Example
GET
Host: api.facebook.com
/v1/oauth/authorize?response_type=token&client_id=s6BhdRkqt3
&state=12fsd3&scope=email&redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb
Access Token Response Example
HTTP/1.1 302 Found
Location: https://client.example.com/cb#access_token=2YotnFZFEjr1zCsicMWpAA&state=12fsd3
&token_type=Bearer&expires_in=3600
Intercambia las credenciales del resource owner por un access token.
Debe ser utilizado solo por aplicaciones propias, o de terceros con los que se tenga un alto grado de confianza.
Resource
Owner
Authorization Server
Client
Access Token
-- (B) --
-- >
-- (C) --
<--
|
(A)
|
Resource Owner Password Credentials
Resource Owner Password Credentials
v
response_type (requerido): debe ser "password".
username (requerido): el username del resource owner.
password (requerido): el password del resource owner.
scope (opcional): especifica sobre que grupo de recursos se esta pidiendo autorización.
Authorization Request Example
POST
Host: api.facebook.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
/v1/oauth/access-token?grant_type=password&username=user123&password=pass123&scope=email
Access Token Response Example
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}
El cliente es dueño de los recursos que esta solicitando.
El cliente debe ser confidencial.
Authorization Server
Client
Access Token
-- (A) --
-- >
-- (B) --
<--
Client Authentication
response_type (requerido): debe ser "client_credentials".
client_id (requerido): el identificador del client.
client_secret (requerido): la contraseña del cliente.
scope (opcional): especifica sobre que grupo de recursos se esta pidiendo autorización.
Authorization Request Example
POST
Host: api.facebook.com
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
Content-Type: application/x-www-form-urlencoded
/v1/oauth/access-token?grant_type=client_credentials&
client_id=client123&client_secret=secret123&scope=email
Access Token Response Example
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
{
"access_token":"2YotnFZFEjr1zCsicMWpAA",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA"
}