Exportar (0) Imprimir
Expandir todo

Implementación de OAuth en su aplicación de Marketplace

Actualizado: enero de 2014

 

Logotipo de DataMarket

Este tema se publicó originalmente con el título "Usar OAuth en su aplicación de DataMarket".

Los desarrolladores pueden crear y comercializar sus aplicaciones en el Marketplace. Estas aplicaciones pueden utilizar datos de Marketplace, en cuyo caso el usuario tendría que suscribirse al conjunto de datos; de lo contrario, no podría utilizar ningún dato de un origen externo.

Secciones de este tema

 

Sección Descripción

Flujos de consentimiento de usuario

Describe los procesos mediante los cuales el usuario proporciona o deniega el consentimiento para que una aplicación tenga acceso a recursos protegidos en el Marketplace.

Flujo de consentimiento para aplicaciones web ASP.NET con la extensión de Windows Identity Foundation para OAuth

Describe cómo obtener el consentimiento de un usuario en una aplicación de ASP.NET con el Marketplace que utiliza OAuth. Se proporcionan ejemplos de código.

Flujo de consentimiento para aplicaciones web

Describe cómo obtener el consentimiento de un usuario en cualquier aplicación web con el Marketplace que utiliza OAuth. Se proporcionan ejemplos de código.

Autenticación en servicios de Marketplace con OAuth

Describe cómo tener acceso a los servicios de Marketplace en nombre del usuario al utilizar OAuth.

Uso del token de actualización para obtener un nuevo token de acceso de OAuth

Describe cómo controlar la caducidad del token obteniendo un nuevo token de acceso de OAuth mediante el token de actualización.

Tipos de solicitudes de permiso

Describe los diferentes tipos de solicitudes de permisos que se pueden utilizar para tener acceso a los servicios de Marketplace.

Registro de una aplicación

Conozca los pasos para registrar una aplicación que utiliza OAuth con el Marketplace.

Apéndice

Tablas de Parámetros, Matriz x_permissions y x_required_offers y mensajes de error.

Flujos de consentimiento de usuario

Antes de que una aplicación obtenga acceso al Marketplace en nombre de un usuario, dicho usuario debe dar su consentimiento para que la aplicación tenga acceso a su cuenta y las suscripciones. El proceso por el que un usuario proporciona dicho consentimiento es el flujo de consentimiento de usuario de OAuth.

El flujo de consentimiento puede contener pasos diferentes según el estado de la cuenta de usuario y las opciones de consentimiento que solicita la aplicación.

Si el usuario proporciona correctamente el consentimiento, la aplicación podrá obtener un token de acceso que, entonces, utiliza para autenticarse en los servicios de Marketplace en nombre del usuario.

Las subsecciones siguientes describen cómo puede integrar el flujo de consentimiento de OAuth en la aplicación dependiendo de la arquitectura.

Flujo de consentimiento para aplicaciones web ASP.NET con la extensión de Windows Identity Foundation para OAuth

La extensión de Windows Identity Foundation (WIF) para OAuth facilita la integración con el Marketplace utilizando OAuth. La biblioteca implementa el protocolo OAuth2.0 y expone métodos sencillos para administrar el flujo de consentimiento del usuario.

noteNota
La extensión de Windows Identity Foundation (WIF) para OAuth pertenece al ámbito de Community Technology Preview (CTP) y no es compatible con Microsoft.

Requisitos previos

Inicio del flujo de consentimiento

Puede comenzar el flujo de consentimiento llamando al método RedirectToEndUserEndpoint() estático en la clase OAuthClient. Esto hace que la solicitud HTTP actual responda con una redirección HTTP 302 al flujo de consentimiento de Marketplace.

El tercer parámetro en el ejemplo de código siguiente es la dirección URL a la que se redirige al explorador del usuario una vez completado el flujo de consentimiento. Debe coincidir con el URI de redireccionamiento que proporcionó al registrar la aplicación en Marketplace.


OAuthClient.RedirectToEndUserEndpoint(
              "https://datamarket.azure.com",
              AuthorizationResponseType.Code,
              "http://myapp.com/authcomplete");

Recepción de la redirección posterior al consentimiento

Cuando el usuario completa el flujo de consentimiento o se produce un error, el explorador del usuario se redirige de nuevo a su aplicación en el URI que proporcionó anteriormente. La extensión de WIF para OAuth recibe y procesa esta redirección y llama a un controlador de eventos que usted registra.

Para habilitar la extensión de WIF para que OAuth procese la redirección, debe registrar el controlador de la biblioteca de cliente mediante la creación o la incorporación de lo siguiente en el archivo Web.config de la aplicación ASP.NET.


<system.webServer>
   <handlers>
      <add name="DataMarketOAuthHandler" 
           verb="*" 
           path="DataMarketOAuthHandler.ashx"
           type="Microsoft.IdentityModel.Protocols.OAuth.Client.EndUserAuthorizationResponseHandler, 
                 Microsoft.IdentityModel.Protocols.OAuth" />
   </handlers>
</system.webServer>

Puede elegir sus propios valores para los atributos de nombre y ruta de acceso. La dirección URL absoluta consta de la dirección URL base de la aplicación concatenada con el atributo de ruta de acceso para el método OAuthClient.RedirectToEndUserEndpoint(). Esta dirección URL absoluta debe coincidir con la que proporcionó al registrar la aplicación en el Marketplace.

En segundo lugar, debe implementar los controladores de eventos para recibir los tokens de acceso y actualización de OAuth 2.0 o para controlar un error de flujo de consentimiento. Los métodos que implementa deben coincidir con las firmas siguientes.


public void OAuthClientSettings.AccessTokenReceived(
                      object Sender,
                      AccessTokenReceivedEventArgs tokenReceivedEventArgs);

Void OAuthClientSettings.EndUserAuthorizationFailed(
                      object Sender,
                      EndUserAuthorizationFailedEventArgs authorizationFailedEventArgs);

En el controlador AccessTokenReceived, obtiene el token de acceso en tokenReceivedEventArgs.AuthorizationResponse.Parameters[OAuthConstants.AccessToken] y el token de actualización en tokenReceivedEventArgs.AuthorizationResonse.Parameters[OAuthConstants.RefreshToken].

Configuración de la extensión de WIF para OAuth

Agregue el código siguiente a la aplicación para configurar la extensión de WIF para OAuth con la configuración de OAuth de Marketplace. Puede agregar esto al método Application_Start para la clase HttpApplication de ASP.NET.

En el código siguiente, reemplace los marcadores de posición por los valores de identificador de cliente y el secreto de cliente que obtuvo al registrar la aplicación. Reemplace AccessTokenReceived y EndUserAuthorizationFailed por los nombres de los controladores de eventos, como se describe en la sección anterior.


// set up the ServerRegistry
InMemoryAuthorizationServerRegistery serverRegistry = 
               new InMemoryAuthorizationServerRegistry(); 
AuthorizationsServerRegistration registrationInfo = 
               new AuthorizationServerRegistration(                                   "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13",
                                   "https://datamarket.azure.com/embedded/consent", 
                                   <<Your OAuth Client ID>>, 
                                   <<Your OAuth Client Secret>>>);

serverRegistry.AddOrUpdate(registrationInfo);
OAuthClientSettings.AuthorizationServerRegistry = serverRegistry; 

// set up the ResourceRegistry 
InMemoryResourceScopeMappingRegistry resourceRegistry = 
               new InMemoryResourceScopeMappingRegistry(); 

resourceRegistry.AddOrUpdate(
                             "https://datamarket.azure.com/embedded/consent", 
                             "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13”, 
                             "https://datamarket.azure.com/embedded/consent", 
                             new string[] { "" }); 
OAuthClientSettings.ResourceScopeMappingRegistry = resourceRegistry; 

// handle the token received event 
OAuthClientSettings.AccessTokenreceived += 
                       new EventHandler<AccessTokenReceivedEventArgs>(OAuthClientSettings_AccessTokenReceived);  

// handle the event when the user denies consent 
OAuthClientSettings.EndUerAuthorizationFailed += 
                       new EventHandler<EndUserAuthorizationFailedEventArgs>(OAuthClientSettings_EndUserAuthorizaitonFailed);  

// register the Authentication Module
AuthenticationManager.Register(new OAuthAuthenticationModule());

Flujo de consentimiento para aplicaciones web

En esta sección se describe cómo integrar su aplicación web con el flujo de consentimiento de OAuth 2.0 de Marketplace. Si se implementa la aplicación web mediante ASP.NET, puede optar por utilizar la extensión de Windows Identity Foundation (WIF) para OAuth como se describe en la sección anterior.

Una aplicación web comienza el flujo de consentimiento llevando el explorador del usuario a la dirección URL de consentimiento de Marketplace. El usuario, a continuación, completa los pasos del flujo de consentimiento en la ventana del explorador. Cuando haya finalizado, el explorador del usuario será redirigido por Marketplace a la URL de redireccionamiento posterior al consentimiento de su aplicación.

Inicio del flujo de consentimiento

El flujo de consentimiento se inicia llevando el explorador del usuario a la dirección URL de consentimiento de Marketplace. Esta dirección URL se construye utilizando los parámetros de cadena de consulta y de dirección URL base.

La dirección URL base es https://datamarket.azure.com/embedded/consent.

La dirección URL del flujo de consentimiento admite los siguientes parámetros de cadena de consulta.

 

Parámetro Requerido/Opcional Descripción

client_id

Obligatorio

El identificador del cliente registrado en Marketplace.

redirect_uri

Opcional

El URI al que se redirige al explorador del usuario una vez completado el flujo de consentimiento.

Si se proporciona, el sistema comprueba que este parámetro coincide con el URI de redireccionamiento registrado previamente para este cliente. Coinciden si todos los componentes del URI son los mismos excepto los correspondientes a la cadena de consulta.

Este valor de parámetro debe ser la dirección URL codificada.

response_type

Obligatorio

El mecanismo que se utilizará para devolver un token de acceso a la aplicación solicitante. El único valor admitido es code.

state

Opcional

Puede utilizar este parámetro para pasar datos arbitrarios desde el principio hasta el final del flujo de consentimiento. Cualquier valor que se incluya para este parámetro se anexará al parámetro de la cadena de consulta del ámbito cuando se redirija el explorador del usuario al URI de redireccionamiento después de que finalice el flujo de consentimiento.

x_permissions

Opcional

Este parámetro determina qué permisos tendrá la aplicación para la cuenta de usuario de Azure Marketplace. Este parámetro puede contener la palabra "account" o un identificador de oferta. Con" account", la aplicación tendrá acceso a la cuenta completa de Azure Marketplace del usuario, incluidas todas las suscripciones actuales y futuras. Con un identificador de oferta, la aplicación tendrá acceso únicamente a suscripciones a la oferta especificada.

Los identificadores de oferta pueden especificarse como una lista delimitada por espacios. Cada identificador de oferta se corresponde con los nombres de proveedor y oferta de la dirección URL raíz de servicio en la página de detalles del conjunto de datos de dicha oferta. Por ejemplo, para solicitar acceso al conjunto de datos Data.gov Crime, se crea el parámetro x_permissions como sigue:

  1. Examine aquí la página de detalles del conjunto de datos de la oferta.

  2. Busque la dirección URL raíz del servicio en la pestaña Detalles. Para esta oferta, es https://api.datamarket.azure.com/data.gov/Crimes/.

  3. Cree el identificador de oferta tomando las partes de proveedor y oferta de la dirección URL. Para esta oferta, es data.gov/Crimes.

  4. Establezca x_permissions=data.gov/Crimes.

Si se especifican identificadores de oferta, los tokens de acceso de esta concesión de consentimiento se destinan solo al acceso a las ofertas especificadas.

Si se especifica account, los tokens de acceso de este consentimiento conceden todo el acceso a todas las ofertas actuales y futuras.

x_required_offers

Opcional

Este parámetro requiere que el usuario tenga una suscripción a la oferta especificada. Si el usuario no tiene todavía una suscripción activa, se le pide que se suscriba como parte del flujo de consentimiento.

El identificador de oferta que se utiliza en este parámetro tiene el mismo formato que los del parámetro x_permissions definido anteriormente.

Si se especifica este parámetro, x_permissions se establece automáticamente en el mismo identificador de oferta y no se puede establecer en la cadena de consulta.

x_scope

Opcional

El formato con codificación URL del extremo que hospeda el servicio de datos al que tendrá acceso. Si se omite, el valor predeterminado es https://api.datamarket.azure.com/.

Por ejemplo, si tiene acceso al servicio de datos en https://api.datamarket.azure.com/data.gov/crimes, entonces el valor de ámbito es https://api.datamarket.azure.com/.

De igual manera, si tiene acceso al servicio de datos en http://api.microsofttranslator.com, entonces el valor de ámbito es http://api.microsofttranslator.com/.

Por ejemplo, la siguiente dirección URL de consentimiento podría solicitar acceso a una cuenta de usuario completa.

Los saltos de línea solo sirven para facilitar la lectura y no deben incluirse en el código.


https://datamarket.azure.com/embedded/consent?
client_id=myapp&
response_type=code&
x_permissions=account

Por ejemplo, la siguiente dirección URL de consentimiento podría solicitar acceso a una cuenta de usuario completa y requerir que dispongan de una suscripción activa al conjunto de datos Data.gov Crime.

Los saltos de línea solo sirven para facilitar la lectura y no deben incluirse en el código.


https://datamarket.azure.com/embedded/consent?
client_id=myapp&
response_type=code&
x_required_offers=data.gov/Crimes

El ejemplo siguiente requiere que el usuario posea una suscripción activa a la suscripción de Microsoft Translator y permita el acceso al extremo SOAP en http://api.microsofttranslator.com/V2/Soap.svc.

Los saltos de línea solo sirven para facilitar la lectura y no deben incluirse en el código.


https://datamarket.azure.com/embedded/consent?
client_id=myapp&
response_type=code&
x_required_offers= Bing/MicrosoftTranslator&
x_scope=http%3a%2f%2fapi.microsofttranslator.com%2f
0

Una vez que la aplicación ha construido una dirección URL de consentimiento de Marketplace, puede dirigir el explorador del usuario a esta dirección URL, ya sea a través de una redirección HTTP 302 o abriendo un nuevo explorador y dirigiéndolo a esta dirección URL.

Recepción de la redirección posterior al consentimiento

Cuando el usuario completa el flujo de consentimiento o se produce un error, el explorador del usuario le redirige de nuevo a la dirección URL de redireccionamiento posterior al consentimiento.

Si el flujo de consentimiento se realizó correctamente, la URL de redireccionamiento posterior al consentimiento tendrá un código con nombre de parámetro de cadena de consulta que contiene el código de autorización devuelto desde Marketplace. Puede intercambiar este código para un token de acceso y el token de actualización para utilizar la autenticación con los servicios de Marketplace.

Si el flujo de consentimiento no se completó correctamente, la dirección URL de redireccionamiento posterior al consentimiento contendrá los siguientes parámetros de cadena de consulta.

 

Parámetro Descripción

error

Un código de error único entre las opciones siguientes:

  • invalid_request
    La solicitud carece de un parámetro necesario, incluye un parámetro o valor del parámetro no admitido o es incorrecta por algún otro motivo.

  • unauthorized_client
    El cliente no está autorizado a solicitar un código de autorización mediante este método.

  • access_denied
    El propietario del recurso o el servidor de la autorización rechazaron la solicitud.

  • unsupported_response_type
    El servidor de autorización no admite la obtención de un código de autorización mediante este método.

  • invalid_scope
    El ámbito solicitado no es válido, es desconocido o tiene un formato incorrecto.

error_description

Un texto legible que proporciona información adicional, que se utiliza para ayudar a entender el error ocurrido y solucionarlo.

state

Si está presente, este es el parámetro "state" de la solicitud de consentimiento original. Configúrelo con el valor exacto recibido de la aplicación.

Intercambio del código de autorización para un token de acceso y un token de actualización

Puede intercambiar el código de autorización para un token de acceso y un token de actualización haciendo una solicitud HTTP POST al extremo del token de OAuth 2.0 de Marketplace (https://datamarket.accesscontrol.windows.net/v2/OAuth2-13).

La solicitud a este extremo debe tener varios parámetros en el cuerpo de la solicitud HTTP. El cuerpo de la solicitud debe ser del tipo de contenido application/x-www-form-urlencoded.

 

Parámetro Requerido/Opcional Valor

client_id

Obligatorio

El identificador del cliente de la aplicación que registra con Marketplace. El client_id debe coincidir con el identificador de cliente pasado a la dirección URL de consentimiento de Marketplace para comenzar el flujo de consentimiento y debe estar en formato con codificación URL.

client_secret

Obligatorio

El secreto del cliente de la aplicación que registra en Marketplace. El client_secret debe estar en formato con codificación URL.

code

Obligatorio

El código de autorización recibido en la dirección URL de redireccionamiento posterior al consentimiento. El code de autorización debe estar en formato con codificación URL.

grant_type

Obligatorio

Debe ser el authorization_code.

redirect_uri

Obligatorio

El URI de redireccionamiento proporcionado al registrar la aplicación. El redirect_uri debe estar en formato con codificación URL.

ámbito

Obligatorio

El formato con codificación URL del extremo que hospeda el servicio de datos al que tendrá acceso. Debe coincidir con el valor de ámbito que proporcionó al invocar el flujo de consentimiento.

Por ejemplo, si tiene acceso al servicio de datos en https://api.datamarket.azure.com/data.gov/crimes, entonces el valor de ámbito es https://api.datamarket.azure.com/.

De igual manera, si tiene acceso al servicio de datos en http://api.microsofttranslator.com, entonces el valor de ámbito es http://api.microsofttranslator.com/.

Su solicitud al extremo de token para intercambiar un código de autorización podría tener el aspecto siguiente.

noteNota
Los saltos de línea en el cuerpo de solicitud HTTP sirven solo para mejorar la legibilidad y se deben quitar.


Post /v2/OAuth2-13 HTTP/1.1
Host: datamarket.accesscontrol.windows.net
Content-Type: application/x-www-form-urlencoded

code=1235486542&
client_id=myapp&
client_secret=MzX8SVXpgjOQWODwZfqiUGfp0FvGPZ&
redirect_uri=https%3a%2f%2fmyapp.com%2fauthcomplete&
grant_type=authorization_code&
scope=https%3a%2f%2fapi.datamarket.azure.com%2f

Recibe de nuevo un token de acceso que se codifica en un objeto JSON.


HTTP/1.1 200 OK
Cache-Control: public, no-store, max-age=0
Content-Type: application/json; charset=us-ascii
Expires: Wed, 20 Apr 2011 18:48:53 GMT
Last-Modified: Wed, 20 Apr 2011 18:48:53 GMT
Vary: *
Server: Microsoft-IIS/7.0
Set-Cookie: ASP.NET_SessionId=chqpl445frmvsaeozn45bu55; path=/; HttpOnly
X-AspNetMvc-Version: 2.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Wed, 20 Apr 2011 18:48:53 GMT
Content-Length: 883

{"access_token":"http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=812d5dea-1111-43c0-b2af-38cbe4d58bf8&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fpermissions=10a6465f-b0a6-49ca-9175-b24caaf74db0&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2009%2f09%2fidentity%2fclaims%2factor=myapp&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=DataMarketIdentityProvider&Audience=https%3a%2f%2fapi.datamarket.azure.com&ExpiresOn=1303325933&Issuer=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&HMACSHA256=YWSfH6Byumh7HqI4j7U8dsXFD88f42irvNVtGdG8zCY%3d",
"token_type":"http://schemas.xmlsoap.org/ws/2009/11/swt-token-profile-1.0",
"expires_in":"599",
"refresh_token":"uG/QvG8eKagO5NFM2XcnSQ==","scope":
"https://api.datamarket.azure.com/"}

Autenticación en servicios de Marketplace con OAuth

Todos los servicios de Marketplace admiten ahora OAuth como método de autenticación. Cuando se autentique mediante OAuth, debe proporcionar un token de acceso válido en la solicitud como parte del encabezado de autorización. El valor del encabezado de autorización debe be "Bearer " + token de acceso.

A continuación, se muestra un ejemplo de una solicitud con un token de acceso de OAuth.


GET /Data.ashx/WeatherBug/HistoricalObservations/HistHilo?$filter=Station_ID%20eq%20'46005' HTTP/1.1
Host: api.datamarket.azure.com
Connection: keep-alive
Authorization: Bearer http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2005%2f05%2fidentity%2fclaims%2fnameidentifier=812d5dea-1111-43c0-b2af-38cbe4d58bf8&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fpermissions=10a6465f-b0a6-49ca-9175-b24caaf74db0&http%3a%2f%2fschemas.xmlsoap.org%2fws%2f2009%2f09%2fidentity%2fclaims%2factor=myapp&http%3a%2f%2fschemas.microsoft.com%2faccesscontrolservice%2f2010%2f07%2fclaims%2fidentityprovider=DataMarketIdentityProvider&Audience=https%3a%2f%2fapi.datamarket.azure.com&ExpiresOn=1303325933&Issuer=https%3a%2f%2fdatamarket.accesscontrol.windows.net%2f&HMACSHA256=YWSfH6Byumh7HqI4j7U8dsXFD88f42irvNVtGdG8zCY%3d
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.204 Safari/534.16
Accept: application/atomsvc+xml;q=0.8, application/json;q=0.5, */*;q=0.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3

Si utiliza las funcionalidades de JSON/P, también puede incluir el token de acceso en el accessToken del parámetro de cadena de consulta con el prefijo "Bearer ". Para obtener más información sobre la compatibilidad con JSON/P, vea el tema JSON/P support for Marketplace services.


<html>
<body>

<script type="text/javascript">
function ondataready(data) {
alert(data);
}
</script>

<script type="text/javascript" src="https://api.datamarket.azure.com/UnitedNations/Demographic/DataSeries?
$callback=ondataready&$format=json&accesstoken=Bearer%20http%253a%252f%252fschemas.xmlsoap.org%252fws
%252f2005%252f05%252fidentity%252fclaims%252fnameidentifier%3dbac9e6aa-3e22-4e05-87da-0525283708de%26http%253a%252f
%252fschemas.microsoft.com%252faccesscontrolservice%252f2010%252f07%252fclaims%252fpermissions%3daccount%26http%253a%252f
%252fschemas.xmlsoap.org%252fws%252f2009%252f09%252fidentity%252fclaims%252factor%3dembedded_demo%26http%253a%252f
%252fschemas.microsoft.com%252faccesscontrolservice%252f2010%252f07%252fclaims%252fidentityprovider
%3dDataMarketIdentityProvider%26Audience%3dhttps%253a%252f%252fapi.datamarket.azure.com%252f%26ExpiresOn
%3d1329153508%26Issuer%3dhttps%253a%252f%252fdatamarket.accesscontrol.windows.net%252f
%26HMACSHA256%3dcPBhxF7iLAy4mSQ98D8NYyrthl2QxqLu0aqHuxlCBOU%253d"></script>

</body>
</html>

Uso del token de actualización para obtener un nuevo token de acceso de OAuth

Dado que los tokens de acceso solo son válidos durante 10 minutos, si la aplicación espera tener acceso a la cuenta de usuario durante un tiempo superior a este período, debe administrar la actualización de tokens.

Consulte la especificación de OAuth 2.0, sección 6 para obtener más información sobre cómo realizar una actualización de token de acceso. Tenga en cuenta que para la actualización se utiliza el mismo extremo de token que se utilizó para intercambiar el código de autenticación para un token de acceso. Tenga en cuenta también que debe proporcionar scope=https%3a%2f%2fapi.datamarket.azure.com%2f como parte de la solicitud de actualización.

A continuación, se muestra un ejemplo de una solicitud de un nuevo token de acceso.

noteNota
Los saltos de línea en el cuerpo de solicitud HTTP sirven solo para mejorar la legibilidad y se deben quitar.


Post /v2/OAuth2-13 HTTP/1.1
Host: datamarket.accesscontrol.windows.net
Content-Type: application/x-www-form-urlencoded

grant_type=refresh_token&
client_id=myapp&
client_secret=mysecret&
refresh_token=uG%2fQvG8eKagO5NFM2XcnSQ%3d%3d&
scope=https%3a%2f%2fapi.datamarket.azure.com%2f

Tipos de solicitudes de permiso

Una vez que el usuario ha iniciado sesión en su cuenta de Marketplace, la aplicación puede solicitar acceso a todos los conjuntos de datos a los que el usuario está suscrito o a conjuntos de datos específicos. Si la aplicación especifica algo distinto de un amplio acceso a la cuenta, debe solicitar autorización y obtener un token de acceso para cada conjunto de datos a los que necesita obtener acceso. El parámetro x_permissions de la solicitud HTTP designa una solicitud de amplio acceso a la cuenta o a un conjunto de datos específico.

  • Amplio acceso a la cuenta

    El acceso a cada conjunto de datos a los que el usuario está suscrito se solicita asignando el valor account al parámetro x_permissions al redirigir el flujo de consentimiento.
    Ejemplo: x_permissions=account

  • Acceso a un conjunto de datos específico

    El acceso a un determinado conjunto de datos se solicita mediante la asignación de la ruta de acceso relativa del conjunto de datos al parámetro x_permissions. La ruta de acceso relativa es la parte de la dirección URL raíz del servicio que identifica el nombre del conjunto de datos y su editor. Por ejemplo, si la dirección URL raíz del servicio es https://datamarket.azure.com/data.ashx/contoso/sales, la ruta de acceso relativa es contoso/sales.
    Ejemplo: x_required_offers=contoso/sales

    Para buscar la dirección URL raíz del servicio

    1. Navegue con su explorador a Marketplace e inicie sesión.

    2. Haga clic en Mis datos.

    3. Busque el conjunto de datos que le interesa (si no aparece, necesita suscribirse a él. Consulte Suscripción a una oferta de datos para obtener instrucciones).

    4. Haga clic en Usar en el lado derecho de la pantalla.

    5. Desplácese hacia abajo y haga clic en la pestaña Detalles.

    6. Busque la Dirección URL raíz del servicio cerca de la parte superior de la página. Cópiela para su uso posterior.

  • Acceso al conjunto de datos requerido

    En lugar de limitar los permisos para un conjunto de datos específico, una aplicación puede requerir que un usuario tenga un conjunto de datos determinado. Esto garantizará que el flujo de consentimiento no se complete correctamente a menos que el usuario tenga una suscripción activa a un conjunto de datos. Para usar esta opción, proporcione un identificador de oferta en el parámetro x_required_offers en lugar de en el parámetro x_permissions.

Una solicitud de lado cliente siempre utiliza code como tipo de solicitud (request_type=code).

Acceso a toda la cuenta

Si la aplicación solicita acceso a todos los conjuntos de datos a los que está suscrito el usuario (x_permissions=account), la pantalla de concesión explícita se presenta cuando el usuario hace clic en Permitir acceso o Cancelar.

Si la aplicación requiere un determinado conjunto de datos (o conjuntos de datos), el usuario puede o no puede suscribirse a todos ellos. Si el usuario tiene una suscripción a cada conjunto de datos requerido, la pantalla de concesión explícita (ver más arriba) se presenta cuando el usuario hace clic en Permitir acceso o Cancelar. Si hay algún conjuntos de datos requerido al que el usuario no está suscrito, se le da la oportunidad de suscribirse o cancelar la acción.

Acceso a un conjunto de datos específico o a varios

La aplicación especifica un conjunto de datos determinado en la solicitud proporcionando en el parámetro x_permissions un identificador de oferta concreto en el formato DataOwner/Dataset.

Si la aplicación requiere un determinado conjunto de datos (o conjuntos de datos), el usuario puede o no puede suscribirse a todos ellos. La aplicación solo tendrá acceso a un conjunto de datos si un usuario tiene una suscripción existente (a menos que la aplicación use el parámetro de cadena de consulta x_required_offers).

Registro de una aplicación

Para que la aplicación reciba un código de autenticación de Marketplace , primero se debe registrar en Marketplace. Al registrar la aplicación en Marketplace, se le asigna el identificador de aplicación y el secreto que se utilizan en el proceso de autenticación y autorización.

Proceso de la aplicación

  1. Inicie sesión en el Marketplace.

  2. Navegue con el explorador a https://datamarket.azure.com/developer/applications.

  3. Haga clic en Crear.

  4. Escriba un identificador único para la aplicación.
    Ejemplo: MyGreatApp10

    ImportantImportante
    El identificador solo puede establecerse al crear un registro y no se puede cambiar si modifica el registro más adelante.

  5. Escriba el nombre de la aplicación.
    Ejemplo: My Great Application v1.0

  6. Escriba el URI de redireccionamiento posterior al consentimiento de la aplicación.

    El URI de redireccionamiento posterior al consentimiento de la aplicación es la dirección URL a la que desea que se redirija al explorador del usuario una vez que el flujo de consentimiento se haya completado correctamente.

  7. Haga clic en Guardar.

Apéndice

Parámetros

El extremo de flujo de consentimiento de OAuth admite los siguientes parámetros de cadena de consulta configurables por el cliente.

 

Parámetro Requerido/Opcional Descripción

client_id

Obligatorio

El identificador del cliente registrado en Marketplace.

redirect_uri

Opcional

Si se proporciona, este sistema comprueba que esto coincide con el URI de redireccionamiento registrado previamente para este cliente. Si coincide con todo excepto la cadena de consulta tiene la misma forma canónica.

Si no se proporciona, el valor predeterminado es el URI registrado previamente.

response_type

Obligatorio

Marketplace solo admite code.

x_permissions

Obligatorio

Si se especifica account, los tokens de acceso de este consentimiento conceden todo el acceso a todas las ofertas actuales y futuras. Si se especifica un identificador de oferta, los tokens de acceso de esta concesión de consentimiento se destinan solo al acceso a las oferta especificada.

Si se especifica un identificador de oferta, los tokens de acceso de esta concesión de consentimiento se destinan solo al acceso a las oferta especificada.

state

Opcional

Un valor opaco que se pasa entre la solicitud y la devolución de llamada.

x_required_offers

Opcional

Un identificador de oferta que utiliza el mismo formato que el parámetro x_permissions.

Para SU2 la lista se limita a una oferta.

Si se proporciona, el sistema garantiza que la cuenta tiene una suscripción activa a todas las ofertas de la lista antes de devolver una respuesta correcta.

La oferta que se incluye en esta lista se incluye implícitamente en el parámetro x_permissions para determinar el ámbito del token de acceso.

Opcionalmente, se puede anexar una oferta con un requisito mínimo de transacción. Si se proporciona, el sistema garantiza que la cuenta está suscrita a una oferta con una diferencia en el límite mensual igual o mayor que el número especificado en este parámetro.

Matriz x_permissions y x_required_offers

Matriz de los parámetros de identificador y x_required_offers de oferta. Si se admiten y el comportamiento de Marketplace resultante.

 

x_permissions x_required_offers Comportamiento resultante

Null

Null

Error

cuenta

Null

Concesión explícita para toda la cuenta.

cuenta

Un identificador de oferta

Concesión explícita para toda una cuenta y compra incorporada para la oferta.

cuenta

Más de un identificador de oferta

Error

Uno o varios identificadores de oferta

Null

Error

Mismo identificador de oferta que x_required_offers

Un identificador de oferta

Compra incorporada para oferta.
Acceso solo a compra incorporada.

Mismo identificador de oferta que x_required_offers

Más de un identificador de oferta

Error

Null

Un identificador de oferta

Compra incorporada para oferta.
Acceso solo a compra incorporada.

mensajes de error

Los mensajes y las condiciones de error que se muestran al usuario cuando se les dirige al flujo de consentimiento.

 

Condición de error Mensaje

El valor de cadena de consulta para response_type falta o es un valor no admitido.

<h1>Bad Request</h1>
<p>La aplicación que utiliza envió una solicitud incorrecta a Marketplace. Póngase en contacto con su proveedor de aplicaciones para informar del error.</p>
<p>El parámetro <param /> faltaba o era un valor no admitido.</p>

El valor de cadena de consulta para x_required_offers contiene identificadores de oferta que no existen.

<h1>Bad Request</h1>
<p>La aplicación que utiliza envió una solicitud incorrecta a Marketplace. Póngase en contacto con su proveedor de aplicaciones para informar del error.</p>
<p>La oferta no existe: <BadOfferId/></p>

El valor de cadena de consulta para client_id no es válido (es decir, el client_id no está registrado en Marketplace).

<h1>Bad Request</h1>
<p>La aplicación que utiliza envió una solicitud incorrecta a Marketplace. Póngase en contacto con su proveedor de aplicaciones para informar del error.</p>
<p>Aplicación no registrada: <ClientId/></p>

El valor de cadena de consulta para client_id se asigna a una aplicación que se ha suspendido.

<h1>Bad Request</h1>
<p>La aplicación que utiliza envió una solicitud incorrecta a Marketplace. Póngase en contacto con su proveedor de aplicaciones para informar del error.</p>
<p>La aplicación se ha suspendido: <ClientId/></p>

Hay demasiadas entradas de x_permissions o x_required_offers.

<h1>Bad Request</h1>
<p>La aplicación que utiliza envió una solicitud incorrecta a Marketplace. Póngase en contacto con su proveedor de aplicaciones para informar del error.</p>
<p>Más de 50 identificadores presentes para x_permissions o x_required_offers.</p>

Vea también

Mostrar:
© 2015 Microsoft