Реализация OAuth в приложении Marketplace

Обновлено: Январь 2014 г.

 

Эмблема DataMarket

Этот раздел был первоначально опубликован под заголовком "Использование протокола OAuth в приложении DataMarket".

Разработчики могут создавать и продавать свои приложения на ресурсе Marketplace. Эти приложения могут использовать данные Marketplace, и в этом случае пользователю необходимо подписаться на набор данных. В противном случае использовать данные из внешнего источника будет невозможно.

 

Раздел Описание

Процедуры получения ("потоки") пользовательского согласия

Описывает процессы, в которых пользователь предоставляет или не предоставляет приложению разрешение на доступ к защищенным ресурсам Marketplace.

Поток согласия для веб-приложений ASP.NET с расширением Windows Identity Foundation для OAuth

Описывает получение согласия от пользователя в приложении ASP.NET в Marketplace с помощью OAuth. Предоставляются примеры кода.

Поток согласия для веб-приложений

Описывает получение согласия от пользователя в любом веб-приложении в Marketplace с помощью OAuth. Предоставляются примеры кода.

Аутентификация в службах Marketplace с использованием протокола OAuth

Описывает доступ к службам Marketplace от имени пользователя при использовании OAuth.

Использование токена обновления для получения нового токена доступа OAuth

Описывает порядок действий в случае истечения срока действия токена путем получения нового токена доступа OAuth с помощью токена обновления.

Типы запросов разрешений

Описывает разные типы запросов на разрешение, которые можно использовать для доступа к службам Marketplace.

Регистрация приложения

Пошаговая инструкция по регистрации приложения, использующего OAuth с Marketplace.

Приложение

Таблицы Параметры, Матрица параметров x_permissions и x_required_offers и сообщения об ошибках.

Прежде чем приложение обратится к Marketplace от имени пользователя, этот пользователь должен предоставить согласие на доступ приложения к учетной записи и подпискам пользователя. Процедура предоставления пользовательского согласия называется "потоком пользовательского согласия с использованием протокола OAuth".

Поток согласия может содержать другие действия в зависимости от состояния учетной записи пользователя и параметров согласия, запрашиваемых приложением.

Если пользователь успешно предоставляет согласие, приложение получает токен доступа, который оно затем использует для прохождения аутентификации в службах Marketplace от имени пользователя.

В подразделах ниже описана интеграция потока согласия с использованием протокола OAuth в приложение в зависимости от архитектуры.

Расширение Windows Identity Foundation (WIF) для протокола OAuth облегчает интеграцию с Marketplace с использованием OAuth. Библиотека реализует протокол OAuth2.0 и предоставляет простые методы управления потоком согласия пользователя.

noteПримечание
Расширение Windows Identity Foundation (WIF) для протокола OAuth является CTP-версией и не поддерживается корпорацией Майкрософт.

  • Загрузите и установите среду выполнения Windows Identity Foundation.



  • Добавьте в проект ссылку на следующие две сборки:

    • Microsoft.IdentityModel.Protocols.OAuth
      Эта сборка находится в целевом каталоге, куда было распаковано расширение Windows Identity Foundation (WIF) для OAuth.

    • System.IdentityModel
      Эта сборка находится в каталоге установки среды выполнения .NET.

Чтобы начать поток согласия, можно вызвать статический метод RedirectToEndUserEndpoint() в классе OAuthClient. После этого текущий HTTP-запрос ответит перенаправлением HTTP 302 на поток согласия Marketplace.

Третий параметр в следующем примере кода — это URL-адрес, на который перенаправляется браузер пользователя после завершения потока согласия. Это значение должно совпадать с URI перенаправления, указанным при регистрации приложения в Marketplace.


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

Когда пользователь завершает поток согласия или возникает ошибка, в браузере пользователя снова открывается приложение с ранее указанным URI: расширение WIF для протокола OAuth получает и обрабатывает это перенаправление и вызывает зарегистрированный обработчик событий.

Чтобы включить расширение WIF для протокола OAuth для обработки перенаправления, необходимо зарегистрировать обработчик клиентской библиотеки, создав или добавив следующее в файл Web.config приложения 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>

Для имени и атрибутов пути вы можете выбрать собственные значения. Абсолютный URL-адрес состоит из базового URL-адреса приложения и атрибута пути для метода OAuthClient.RedirectToEndUserEndpoint(). Этот абсолютный URL-адрес должен соответствовать адресу, указанному при регистрации приложения в Marketplace.

Во-вторых, необходимо реализовать обработчики событий для получения доступа к протоколу OAuth 2.0 и токенов обновления или обработки ошибки потока согласия. Реализуемые методы должны соответствовать следующим сигнатурам.


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

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

В обработчике AccessTokenReceived пользователь получает токен доступа в tokenReceivedEventArgs.AuthorizationResponse.Parameters[OAuthConstants.AccessToken], а токен обновления — в tokenReceivedEventArgs.AuthorizationResonse.Parameters[OAuthConstants.RefreshToken].

Добавьте следующий код в приложение, чтобы настроить расширение WIF для OAuth с параметрами OAuth в Marketplace. Этот код можно добавить к методу Application_Start для класса ASP.NET HttpApplication.

В приведенном ниже коде замените местозаполнители значениями идентификатора клиента и секрета клиента, полученными при регистрации приложения. Замените AccessTokenReceived и EndUserAuthorizationFailed именами обработчиков событий, как описано в предыдущем разделе.


// 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());

В этом разделе описана интеграция веб-приложения с потоком согласия Marketplace OAuth 2.0. Если веб-приложение реализовано с помощью ASP.NET, целесообразно использовать расширение Windows Identity Foundation (WIF) для протокола OAuth, как описано в предыдущем разделе.

Веб-приложение начинает поток согласия, открывая в браузере пользователя URL-адрес согласия для Marketplace. Затем пользователь выполнит необходимые для предоставления согласия действия в окне браузера. По завершении этих действий Marketplace переадресует браузер пользователя, используя URL-адрес приложения для перенаправления после получения согласия.

Поток согласия начинается с открытия URL-адреса согласия для Marketplace в браузере пользователя. URL-адрес состоит из базового URL-адреса и параметров строки запроса.

Базовый URL-адрес — https://datamarket.azure.com/embedded/consent.

URL-адрес потока согласия поддерживает следующие параметры строки запроса.

 

Параметр Обязательный или необязательный Описание

client_id

Обязательно

Идентификатор клиента, зарегистрированный в Marketplace.

redirect_uri

Необязательно

URI, на который перенаправляется браузер пользователя по завершении потока согласия.

Если указано, система проверяет, что этот параметр соответствует URI перенаправления, который предварительно зарегистрирован для данного клиента. Они совпадают, если все компоненты URI, кроме строки запроса, одинаковы.

Значение этого параметра должно иметь формат URL-адреса.

response_type

Обязательно

Механизм, который будет использоваться для возврата токена доступа запрашивающему приложению. Поддерживается только значение code.

state

Необязательно

Этот параметр можно использовать для передачи произвольных данных от начала до конца потока согласия. Любое значение, указываемое для этого параметра, будет добавлено в параметр строки запроса области действия, когда браузер пользователя перенаправляется на URI перенаправления по завершении потока согласия.

x_permissions

Необязательно

Этот параметр определяет, какие разрешения будет иметь приложение в отношении учетной записи пользователя на Azure Marketplace. Этот параметр может содержать учетную запись или идентификатор предложения. Благодаря учетной записи приложение получает доступ ко всей учетной записи пользователя в Azure Marketplace, включая все текущие и будущие подписки. Благодаря идентификатору предложения приложение получает доступ только к подпискам на указанное предложение.

Идентификаторы предложений можно указать в виде списка, разделенного пробелами. Каждый идентификатор предложения соответствует имени поставщика и названию предложения из корневого URL-адреса службы на странице сведений о наборе данных соответствующего предложения. Например, чтобы запросить доступ к набору данных Data.gov Crime, необходимо составить параметр x_permissions следующим образом:

  1. Посмотрите на предложение на странице сведений о наборе данных.

  2. На вкладке "Сведения" найдите корневой URL-адрес службы. Для этого предложения это https://api.datamarket.azure.com/data.gov/Crimes/.

  3. Составьте идентификатор предложения из частей URL-адреса, относящихся к поставщику и предложению. Для этого предложения это data.gov/Crimes.

  4. Задайте значение x_permissions=data.gov/Crimes.

Если указаны идентификаторы предложения, все токены доступа из предоставленного согласия обеспечивают доступ только к указанным предложениям.

Если указано значение account, все токены доступа из этого согласия предоставляют полный доступ ко всем текущим и будущим предложениям.

x_required_offers

Необязательно

Этот параметр требует наличия у пользователя подписки на заданное предложение. Если у пользователя еще нет активной подписки, в рамках потока согласия отображается запрос на создание такой подписки.

Идентификатор предложения, используемый в этом параметре, имеет тот же формат, что и в определенном выше параметре x_permissions.

Если этот параметр задан, x_permissions автоматически присваивается тому же идентификатору предложения; этот параметр невозможно задать в строке запроса.

x_scope

Необязательно

Форма конечной точки в виде URL-адреса, где будет размещена служба данных, к которой осуществляется доступ. Если эти сведения не указаны, по умолчанию используется https://api.datamarket.azure.com/.

Например, если осуществляется доступ к службе данных по адресу https://api.datamarket.azure.com/data.gov/crimes, то значение области действия — https://api.datamarket.azure.com/.

Аналогично, если осуществляется доступ к службе данных по адресу http://api.microsofttranslator.com, то значение области действия — http://api.microsofttranslator.com/.

Например, следующий URL-адрес согласия запросит доступ ко всей учетной записи пользователя.

Разрывы строки используются исключительно для удобства чтения, включать их в код не нужно.


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

Например, следующий URL-адрес согласия будет запрашивать доступ ко всей учетной записи пользователя и требовать наличия активной подписки на набор данных Data.gov Crime.

Разрывы строки используются исключительно для удобства чтения, включать их в код не нужно.


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

В приведенном ниже примере требуется наличие у пользователя активной подписки Microsoft Translator и разрешение на доступ к конечной точке SOAP на сайте http://api.microsofttranslator.com/V2/Soap.svc.

Разрывы строки используются исключительно для удобства чтения, включать их в код не нужно.


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

После того как приложение составит URL-адрес согласия Marketplace, можно открыть этот URL-адрес в браузере пользователя, воспользовавшись перенаправлением HTTP 302 или открыв этот URL-адрес в новом окне браузера.

Когда пользователь завершает поток согласия или возникает ошибка, в браузере пользователя снова открывается URL-адрес приложения для перенаправления после получения согласия.

При успешном выполнении потока согласия URL-адрес перенаправления после согласия будет иметь именованный код параметра строки запроса с кодом авторизации, возвращенным Marketplace. Можно обменять этот код на токен доступа и токен обновления, которые будут использоваться для аутентификации в службах Marketplace.

Если поток согласия завершается сбоем, URL-адрес перенаправления после согласия будет содержать следующие параметры строки запроса.

 

Параметр Описание

error

Один код ошибки, вызванной следующим:

  • invalid_request
    В запросе отсутствует обязательный параметр, запрос содержит неподдерживаемый параметр или неподдерживаемое значение параметра, либо запрос имеет неверный формат.

  • unauthorized_client
    Клиенту не разрешено запрашивать код авторизации с помощью этого метода.

  • access_denied
    Владелец ресурсов или сервер авторизации отклонил запрос.

  • unsupported_response_type
    Сервер авторизации не поддерживает получение кода авторизации с помощью этого метода.

  • invalid_scope
    Запрошенная область действия недопустима, неизвестна или имеет неверный формат.

error_description

Произошла ошибка удобочитаемого текста, который содержит дополнительную информацию, необходимую для анализа и устранения ошибки.

state

Если этот параметр присутствует, это параметр state из исходного запроса согласия. Задайте точное значение, полученное от приложения.

Код авторизации можно обменять на токен доступа и токен обновления, отправив запрос HTTP POST на конечную точку Marketplace OAuth 2.0 (https://datamarket.accesscontrol.windows.net/v2/OAuth2-13).

В основную часть HTTP-запроса, адресованного этой конечной точке, необходимо включить несколько параметров. Основная часть запроса должна иметь следующий тип содержимого: application/x-www-form-urlencoded.

 

Параметр Обязательный или необязательный Значение

client_id

Обязательно

Идентификатор клиента приложения, зарегистрированный в Marketplace. client_id должен соответствовать ИД клиента, переданному URL-адресу согласия Marketplace, чтобы можно было запустить поток согласия. Кроме того, этот идентификатор должен иметь формат URL-адреса.

client_secret

Обязательно

Секрет клиента приложения, зарегистрированный в Marketplace. client_secret должен иметь формат URL-адреса.

code

Обязательно

Код авторизации, полученный из URL-адреса перенаправления после согласия. code авторизации должен иметь формат URL-адреса.

grant_type

Обязательно

Должен являться authorization_code.

redirect_uri

Обязательно

URI перенаправления, указанный при регистрации приложения. redirect_uri должен иметь формат URL-адреса.

область действия

Обязательно

Форма конечной точки в виде URL-адреса, где будет размещена служба данных, к которой осуществляется доступ. Должна соответствовать значению области действия, указанному при вызове потока согласия.

Например, если осуществляется доступ к службе данных по адресу https://api.datamarket.azure.com/data.gov/crimes, то значение области действия — https://api.datamarket.azure.com/.

Аналогично, если осуществляется доступ к службе данных по адресу http://api.microsofttranslator.com, то значение области действия — http://api.microsofttranslator.com/.

Запрос на обмен кода авторизации, адресованный конечной точке токена, может выглядеть следующим образом.

noteПримечание
Разрывы строк в основной части HTTP-запроса используются исключительно для удобства чтения, их нужно удалить.


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

Вы получите токен доступа, закодированный в объекте 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/"}

Все службы Marketplace теперь поддерживают протокол OAuth в качестве метода аутентификации. При выполнении аутентификации с использованием OAuth необходимо по запросу указать в заголовке раздела авторизации действительный токен доступа. Значение заголовка авторизации должно иметь вид be "Bearer " + токен доступа.

Ниже показан пример запроса с токеном доступа 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

При использовании возможностей JSON/P можно также включить токен доступа в параметр строки запроса accessToken с префиксом Bearer . Дополнительные сведения о поддержке JSON/P см. в разделе 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>

Поскольку срок действия токенов доступа не превышает 10 минут, необходимо воспользоваться функцией обновления токенов, если планируется осуществлять доступ к учетной записи пользователя из приложения в течение более длительного периода.

См. раздел 6 спецификации OAuth 2.0 для получения дополнительных инструкций по обновлению токена доступа. Обратите внимание, что для обновления используется та же конечная точка токена, что и для обмена кода аутентификации на токен доступа. Кроме того, обратите внимание, что необходимо предоставить в составе запроса на обновление код scope=https%3a%2f%2fapi.datamarket.azure.com%2f.

Ниже показан пример запроса нового токена доступа.

noteПримечание
Разрывы строк в основной части HTTP-запроса используются исключительно для удобства чтения, их нужно удалить.


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

Если пользователь выполнил вход в Marketplace со своей учетной записью, приложение может запросить доступ ко всем наборам данных, на которые подписан пользователь, либо к некоторым из них. Если приложение подает запрос на что-либо, отличное от полного доступа к учетной записи, оно должно запросить авторизацию и получить токен доступа для каждого набора данных, доступ к которому приложение будет осуществлять. Параметр x_permissions HTTP-запроса обозначает запрос на доступ на уровне учетной записи или доступ к конкретному набору данных.

  • Доступ на уровне учетной записи

    Для запроса доступа ко всем наборам данных, на которые подписан пользователь, необходимо присвоить значение account параметру x_permissions при перенаправлении в поток согласия.
    Пример. x_permissions=account

  • Доступ к конкретным наборам данных

    Для запроса доступа к конкретному набору данных необходимо назначить относительный путь к набору данных параметру x_permissions. Относительный путь — это часть корневого URL-адреса службы, определяющая издателя и имя набора данных. Например, если корневой URL-адрес службы — https://datamarket.azure.com/data.ashx/contoso/sales, то относительный путь — contoso/sales.
    Пример. x_required_offers=contoso/sales

    Поиск корневого URL-адреса службы

    1. Откройте в браузере сайт Marketplace и выполните вход в систему.

    2. Щелкните My Data ("Мои данные").

    3. Найдите интересующий набор данных (если он не указан в списке, необходимо подписаться на него. См. инструкции в разделе Подписка на предложение данных).

    4. Щелкните Use ("Использовать") в правой части экрана.

    5. Прокрутите вниз и выберите вкладку Сведения.

    6. Найдите Service root URL ("Корневой URL-адрес службы") в верхней части страницы. Скопируйте его для последующего использования.

  • Доступ к требуемому набору данных

    Вместо того чтобы ограничивать предоставленные разрешения определенным набором данных, приложение может потребовать от пользователя использования конкретного набора данных. Это позволит гарантировать, что поток согласия успешно завершится только при наличии у пользователя активной подписки на набор данных. Для использования этого варианта необходимо указать идентификатор предложения в параметре x_required_offers, а не x_permissions.

В клиентском запросе в качестве типа запроса всегда используется code (request_type=code).

Если приложение требует доступ ко всем наборам данных, на которые подписан пользователь (x_permissions=account), появляется экран предоставления явного разрешения, где пользователь может щелкнуть Разрешить доступ или Отмена.

Если приложение требует определенного набора данных (или наборов данных), у пользователя может иметься или отсутствовать подписка на все эти наборы данных. Если у пользователя имеется подписка на все необходимые наборы данных, появляется экран предоставления явного разрешения (см. выше), на котором пользователь может нажать кнопку Разрешить доступ или Отмена. Если пользователь не подписан на какие-либо необходимые наборы данных, ему предоставляется возможность подписаться на них или выбрать Отмена.

Приложение указывает в запросе конкретный набор данных, присвоив параметру x_permissions конкретный ИД предложения в формате DataOwner/Dataset.

Если приложение требует определенного набора данных (или наборов данных), у пользователя может иметься или отсутствовать подписка на все эти наборы данных. Приложение получит доступ к набору данных только при наличии у пользователя действующей подписки (исключение составляют случаи, когда приложение использует параметр строки запроса x_required_offers).

Для получения приложением кода аутентификации из Marketplace оно должно быть зарегистрировано в Marketplace. При регистрации приложения в Marketplace вам присваивается идентификатор приложения и секретный код, которые используются в процессе аутентификации и авторизации.

Процедура

  1. Выполните вход в Marketplace.

  2. Откройте в браузере сайт https://datamarket.azure.com/developer/applications.

  3. Нажмите кнопку Создать.

  4. Введите уникальный идентификатор приложения.
    Пример. MyGreatApp10

    ImportantВажно!
    Идентификатор можно задать только при регистрации. Впоследствии при редактировании регистрационных данных изменить этот идентификатор невозможно.

  5. Укажите название приложения.
    Пример. My Great Application v1.0

  6. Укажите URI приложения для перенаправления после согласия.

    URI приложения для перенаправления после согласия — это URL-адрес, который будет открываться в браузере пользователя после успешного завершения потока согласия.

  7. Нажмите кнопку Сохранить.

Конечная точка потока согласия по протоколу OAuth поддерживает следующие задаваемые клиентом параметры строки запроса.

 

Параметр Обязательный или необязательный Описание

client_id

Обязательно

Идентификатор клиента, зарегистрированный в Marketplace.

redirect_uri

Необязательно

Если указано, система проверяет, что он соответствует URI перенаправления, который предварительно зарегистрирован для данного клиента. Если он соответствует, то все, кроме строки запроса, имеет одну и ту же каноническую форму.

Если не указано, это значение по умолчанию равно предварительно зарегистрированному URI.

response_type

Обязательно

Marketplace поддерживает только code.

x_permissions

Обязательно

Если указано значение account, все токены доступа из этого согласия предоставляют полный доступ ко всем текущим и будущим предложениям. Если указан идентификатор предложения, все токены доступа из предоставленного согласия обеспечивают доступ только к указанным предложениям.

Если указан идентификатор предложения, все токены доступа из предоставленного согласия обеспечивают доступ только к указанным предложениям.

state

Необязательно

Непрозрачное значение, которое передается от запроса обратному вызову и обратно.

x_required_offers

Необязательно

Идентификатор предложения, который использует тот же формат, что и параметр x_permissions.

Для SU2 список ограничен одним предложением.

Если указано, система проверяет наличие у учетной записи активной подписки на все предложения в списке, прежде чем вернуть успешный отклик.

Предложение, включенное в этот список, неявно включается в параметр x_permissions для определения области действия токена доступа.

При необходимости к предложению можно добавить минимальное требование транзакции. Если такое требование указано, система проверяет наличие у учетной записи подписки на вариант предложения с месячным лимитом, который равен числу, указанному в параметре, или превышает его.

Матрица ИД предложений и параметров x_required_offers. Поддерживаются или нет и соответствующее поведение Marketplace.

 

x_permissions x_required_offers Соответствующее поведение

Null

Null

Ошибка

учетная запись

Null

Явное разрешение для всей учетной записи.

учетная запись

Один ИД предложения

Явное разрешение для всей учетной записи и внедренная покупка для предложения.

учетная запись

Несколько ИД предложений

Ошибка

Один или несколько ИД предложений

Null

Ошибка

Тот же ИД предложения, что и для x_required_offers

Один ИД предложения

Внедренная покупка для предложения.
Доступ только к приобретенному предложению.

Тот же ИД предложения, что и для x_required_offers

Несколько ИД предложений

Ошибка

Null

Один ИД предложения

Внедренная покупка для предложения.
Доступ только к приобретенному предложению.

Условия ошибки и сообщения об ошибке, отображаемые пользователю при переходе к потоку согласия.

 

Условие ошибки Сообщение

Значения строки запроса для response_type отсутствует или не поддерживается.

<h1>Недопустимый запрос</h1>
<p>Используемое приложение отправило недопустимый запрос в Marketplace. Обратитесь к поставщику приложения, чтобы сообщить об этой ошибке.</p>
<p>Параметр <param/> отсутствует или имеет недопустимое значение.</p>

Значение строки запроса для параметра x_required_offers содержит несуществующие идентификаторы предложений.

<h1>Недопустимый запрос</h1>
<p>Используемое приложение отправило недопустимый запрос в Marketplace. Обратитесь к поставщику приложения, чтобы сообщить об этой ошибке.</p>
<p>Предложение не существует: <BadOfferId/></p>

Недопустимое значение строки запроса для client_id (то есть client_id не зарегистрирован в Marketplace).

<h1>Недопустимый запрос</h1>
<p>Используемое приложение отправило недопустимый запрос в Marketplace. Обратитесь к поставщику приложения, чтобы сообщить об этой ошибке.</p>
<p>Приложение не зарегистрировано: <ClientId/></p>

Значение строки запроса для client_id сопоставляется приостановленному приложению.

<h1>Недопустимый запрос</h1>
<p>Используемое приложение отправило недопустимый запрос в Marketplace. Обратитесь к поставщику приложения, чтобы сообщить об этой ошибке.</p>
<p>Приложение приостановлено: <ClientId/></p>

Слишком много записей x_premissions или x_required_offers.

<h1>Недопустимый запрос</h1>
<p>Используемое приложение отправило недопустимый запрос в Marketplace. Обратитесь к поставщику приложения, чтобы сообщить об этой ошибке.</p>
<p>Для параметров x_permissions или x_required_offers представлено более 50 идентификаторов.</p>

См. также

Показ: