销售电话: 1-800-867-1380

在 Marketplace 应用程序中实现 OAuth

更新时间: 2014年1月

 

DataMarket 徽标

本主题最初发布在标题为“在 DataMarket 应用程序中使用 OAuth”的文章下面。

开发人员可以在 Marketplace 上创建和营销其应用程序。这些应用程序可以使用 Marketplace 数据,在这种情况下,用户将必须订阅数据集,否则可能无法使用外部源中的数据。

本主题中的各部分

 

部分 说明

用户许可流

描述用户许可或拒绝应用程序访问 Marketplace 上受保护资源的流程。

针对包含 Windows Identity Foundation Extension for OAuth 的 ASP.NET Web 应用程序的许可流

介绍如何使用 OAuth 获取包含 Marketplace 的 ASP.NET 应用程序中某个用户的许可。提供了代码示例。

Web 应用程序的许可流

介绍如何使用 OAuth 获取包含 Marketplace 的任何 Web 应用程序中某个用户的许可。提供了代码示例。

使用 OAuth 对 Marketplace 服务进行身份验证

介绍在使用 OAuth 时如何代表用户访问 Marketplace 服务。

使用刷新令牌获取新的 OAuth 访问令牌

介绍如何通过使用刷新令牌获取新的 OAuth 访问令牌,来处理令牌过期。

权限请求的类型

介绍可用于访问 Marketplace 服务的不同类型的权限请求。

注册应用程序

演练如何注册结合使用 OAuth 和 Marketplace 的应用程序。

附录

参数表、x_permissions 和 x_required_offers 矩阵错误消息

用户许可流

在某个应用程序代表某个用户访问 Marketplace 之前,该用户必须许可该应用程序访问其帐户和订阅。用户提供该许可的流程就是指 OAuth 用户许可流。

根据用户帐户的状态和应用程序请求的许可选项,许可流可能包含不同的步骤。

在用户成功提供许可后,应用程序可以获得访问令牌,然后使用该令牌代表用户对 Marketplace 服务进行身份验证。

以下小节介绍了如何根据体系结构,将 Oauth 许可流集成到应用程序中。

针对包含 Windows Identity Foundation Extension for OAuth 的 ASP.NET Web 应用程序的许可流

借助 Windows Identity Foundation (WIF) Extension for OAuth,可以轻松地使用 OAuth 来与 Marketplace 集成。该库实现了 OAuth2.0 协议,并公开了一些简单方法用于管理用户许可流。

note备注
Windows Identity Foundation (WIF) Extension for OAuth 是预览版社区技术 (CTP),不受 Microsoft 的支持。

先决条件

开始执行许可流

可通过对 OAuthClient 类调用静态 RedirectToEndUserEndpoint() 方法来开始执行许可流。这会导致当前 HTTP 请求响应 HTTP 302 并重定向至 Marketplace 许可流。

以下代码示例中第三个参数是完成许可流后,用户浏览器重定向到的 URL。此 URL 必须与你在将应用程序注册到 Marketplace 时提供的重定向 URI 匹配。


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

接收许可后的重定向

当用户完成许可流或者出错时,会将用户的浏览器重定向到你前面提供的 URI。WIF Extension for OAuth 将接收并处理此重定向,然后调用你注册的事件处理程序。

若要使 WIF Extension for OAuth 处理重定向,你必须通过向 ASP.NET 应用程序的 Web.config 创建或添加以下内容,来注册客户端库的处理程序。


<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 时提供的 URL 匹配。

其次,你必须实现事件处理程序,以接收 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 Extension for OAuth

将以下代码添加到应用程序中,以使用 Marketplace OAuth 设置来配置 WIF Extension for OAuth。可将此方法添加到 ASP.NET HttpApplication 类的 Application_Start 方法。

在以下代码中,将占位符替换为你在注册应用程序时获取的客户端 ID 和客户端密钥值。将 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());

Web 应用程序的许可流

本部分介绍如何将 Web 应用程序集成到 Marketplace OAuth 2.0 许可流。如果你的 Web 应用程序是使用 ASP.NET 实现的,则应考虑按前一部分中所述,使用 Windows Identity Foundation (WIF) Extension for OAuth。

Web 应用程序通过将用户浏览器导航到 Marketplace 许可 URL 来开始许可流。然后,用户将在其浏览器窗口中完成许可流步骤。完成后,Marketplace 会将用户的浏览器重定向到应用程序的许可后重定向 URL。

开始执行许可流

通过将用户浏览器导航到 Marketplace 许可 URL 来开始许可流。此 URL 是使用基 URL 和查询字符串参数构造的。

基 URL 为 https://datamarket.azure.com/embedded/consent

许可流 URL 支持以下查询字符串参数。

 

Parameter 必需/可选 说明

client_id

必需

已注册到 Marketplace 的客户端 ID。

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 的有效订阅,并允许访问位于 http://api.microsofttranslator.com/V2/Soap.svc 的 SOAP 终结点。

换行符只是为了便于阅读,不应包含在代码中


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

在应用程序构造 Marketplace 许可 URL 后,可以通过 HTTP 302 重定向或者将新浏览器导航到此 URL,来将用户的浏览器导航到此 URL。

接收许可后的重定向

当用户完成许可流或出错时,用户的浏览器将重定向回到应用程序的许可后重定向 URL。

如果许可流成功,许可后重定向 URL 将包含一个名为 code 的查询字符串参数,其中包含从 Marketplace 返回的授权代码。你可以使用此代码来交换访问令牌和刷新令牌,以用于对 Marketplace 服务进行身份验证。

如果许可流未成功,许可后重定向 URL 将包含以下查询字符串参数。

 

Parameter 说明

error

下列其中一个错误代码:

  • invalid_request
    请求缺少必需的参数、包含不支持的参数或参数值,或者格式不正确。

  • unauthorized_client
    客户端无权使用此方法请求授权代码。

  • access_denied
    资源所有者或授权服务器拒绝了请求。

  • unsupported_response_type
    授权服务器不支持使用此方法获取授权代码。

  • invalid_scope
    请求的作用域无效、未知或格式不正确。

error_description

提供更多信息的用户可读文本,用于帮助了解和解决所发生的错误。

state

如果存在,则表示原始许可请求返回的“state”参数。请设置为从应用程序收到的确切值。

使用授权代码交换访问令牌和刷新令牌

可以通过向 Marketplace OAuth 2.0 令牌终结点 (https://datamarket.accesscontrol.windows.net/v2/OAuth2-13) 发出 HTTP POST 请求,使用授权代码来交换访问令牌和刷新令牌。

对此终结点的请求必须在 HTTP 请求正文中包含几个参数。请求正文的内容类型必须是 application/x-www-form-urlencoded

 

Parameter 必需/可选

client_id

必需

注册到 Marketplace 的应用程序的客户端 ID。client_id 必须与传递给 Marketplace 许可 URL 的客户端 ID 匹配才能开始许可流,并且它必须采用 URL 编码格式。

client_secret

必需

注册到 Marketplace 的应用程序的客户端机密。client_secret 必须采用 URL 编码格式。

code

必需

在许可后重定向 URL 中收到的授权代码。授权code必须采用 URL 编码格式。

grant_type

必需

必须是 authorization_code

redirect_uri

必需

注册应用程序时提供的重定向 URI。redirect_uri 必须采用 URL 编码格式。

scope

必需

托管你要访问的数据服务的终结点的 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/"}

使用 OAuth 对 Marketplace 服务进行身份验证

所有 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>

使用刷新令牌获取新的 OAuth 访问令牌

由于访问令牌只能生效 10 分钟,因此,如果应用程序访问用户帐户的时间超过此期限,你必须进行令牌刷新处理。

有关如何执行访问令牌刷新的详细信息,请参阅 OAuth 2.0 规范的第 6 部分。请注意,同一个令牌终结点既又用于刷新,又用于交换访问令牌的身份验证代码。另请注意,必须提供 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 帐户后,应用程序可以请求访问该用户订阅的所有数据集或特定的数据集。如果应用程序指定了除帐户级访问以外的任何权限,它必须请求授权并获取它需要访问的每个数据集的访问令牌。HTTP 请求中的 x_permissions 参数指定帐户级或特定数据集访问请求。

  • 帐户级访问

    可以在重定向到许可流时,通过向 x_permissions 参数分配 account 值,来请求访问用户订阅的每个数据集。
    示例: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. 单击“我的数据”。

    3. 查找所需的数据集(如果未列出,则你需要订阅它)。(如需指导,请参阅订阅数据产品。)

    4. 单击屏幕右侧的“使用”。

    5. 向下滚动,然后单击“详细信息”选项卡。

    6. 找到页面顶部附近的“服务根 URL”。复制此信息以供将来使用。

  • 所需的数据集访问

    应用程序可以要求用户具有特定的数据集,而不必将权限限制为特定的数据集。这将会确保除非用户具有数据集的有效订阅,否则许可流不会成功完成。若要使用此选项,请在 x_required_offers 参数而不是 x_permissions 参数中提供产品标识符。

客户端请求始终使用 code 作为请求类型 (request_type=code)。

访问整个帐户

如果应用程序请求访问用户订阅的所有数据集 (x_permissions=account),当用户单击“允许访问”或“取消”时,将出现显式授权屏幕。

如果应用程序需要一个特定的数据集(或多个数据集),则用户可以或者不可以订阅所有这些数据集。如果用户订阅了每个必需的数据集,则当用户单击“允许访问”或“取消”时,将出现显式授权屏幕(参阅上图)。如果有任何必需的数据集未被用户订阅,用户可以选择订阅或取消

访问特定的一个或多个数据集

应用程序可通过在 x_permissions 参数中提供 DataOwner/Dataset 格式的特定产品 ID,在请求中指定特定的数据集。

如果应用程序需要一个特定的数据集(或多个数据集),则用户可以或者不可以订阅所有这些数据集。仅当用户有现有的订阅时,应用程序才会访问数据集(除非应用程序使用 x_required_offers 查询字符串参数)。

注册应用程序

要使应用程序从 Marketplace 接收身份验证代码,首先必须将它注册到 Marketplace。当你将应用程序注册到 Marketplace 时,系统将为你分配一个要在身份验证和授权过程中使用的应用程序 ID 和机密。

应用程序进程

  1. 登录到管理门户 (Marketplace)。

  2. 将浏览器导航到 https://datamarket.azure.com/developer/applications

  3. 单击“创建”

  4. 输入应用程序的唯一 ID。
    示例:MyGreatApp10

    Important重要提示
    只能在创建注册时设置 ID,如果你以后编辑了注册,则无法更改此 ID。

  5. 输入应用程序的名称。
    示例:My Great Application v1.0

  6. 输入应用程序的许可后重定向 URI。

    应用程序的许可后重定向 URI 是在成功完成许可流后,你希望用户浏览器重定向到的 URL。

  7. 单击“保存”

附录

参数

OAuth 许可流终结点支持以下客户端可设置查询字符串参数。

 

Parameter 必需/可选 说明

client_id

必需

已注册到 Marketplace 的客户端 ID。

redirect_uri

可选

如果已提供,系统将会验证此参数是否与预先为此客户端注册的重定向 URI 相匹配。如果匹配,则除查询字符串以外的所有内容都具有相同的规范格式。

如果未提供,则此值将默认为预先注册的 URI。

response_type

必需

Marketplace 仅支持 code

x_permissions

必需

如果指定了account,则使用此许可授权中的任何访问令牌可以全权访问当前和将来的所有产品。如果指定了产品标识符,使用此许可授权中的任何访问令牌只能访问指定的产品。

如果指定了产品标识符,使用此许可授权中的任何访问令牌只能访问指定的产品。

state

可选

在请求和回调之间传递的不透明值。

x_required_offers

可选

使用与 x_permissions 参数相同的格式的产品 ID。

对于 SU2,该列表将限制为一个产品。

如果已提供,则系统会确保在返回成功响应之前,帐户具有列表中所有产品的有效订阅。

此列表中的产品已隐含在用于确定访问令牌作用域的 x_permissions 参数中。

有时,产品还会附带最低的事务要求。如果提供了此参数,功能提供系统可确保该帐户是为每月限制等于优惠变体已订阅或大于此参数中指定的数字。

x_permissions 和 x_required_offers 矩阵

产品 ID 和 x_required_offers 参数的矩阵。是否受支持和最终 Marketplace 行为。

 

x_permissions x_required_offers 最终行为

Null

Null

错误

帐户

Null

整个帐户的显式授权。

帐户

一个产品 ID

整个帐户的显式授权和产品的嵌入购买状态。

帐户

多个产品 ID

错误

一个或多个产品 ID

Null

错误

与 x_required_offers 相同的产品 ID

一个产品 ID

产品的嵌入购买状态。
只能访问已购买的产品。

与 x_required_offers 相同的产品 ID

多个产品 ID

错误

Null

一个产品 ID

产品的嵌入购买状态。
只能访问已购买的产品。

错误消息

将用户导航到许可流时向用户显示的错误状态和消息。

 

错误状态 Message

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>

另请参阅

本文是否对您有所帮助?
(1500 个剩余字符)
感谢您的反馈
Microsoft 正在进行一项网上调查,以了解您对 MSDN 网站的意见。 如果您选择参加,我们将会在您离开 MSDN 网站时向您显示该网上调查。

是否要参加?
显示:
© 2015 Microsoft