平台简介 新手指南 应用权限说明 移动应用-互动到店业务 TVOS游戏业务 YUNOS开放业务 阿里百川业务 第三方IT工具 商家后台系统应用 服务商后台系统应用 千牛开放业务 阿里.去哪儿业务 WMS(仓储管理系统) 业务接入指南 天猫品牌会员 淘宝客 云盾魔方 API列表 平台技术-API调用协议 平台技术-用户授权介绍 平台技术-应用环境介绍 平台技术-Java SDK使用说明 平台技术-.NET SDK使用说明 平台技术-API调用示例 平台技术-消息服务使用介绍 平台技术-API批量调用简介 平台技术-SPI服务接入文档 平台功能-沙箱环境说明 平台功能-支付宝API开发帮助 平台功能-API文档其他查看方式 平台功能-多店铺管理 平台功能-应用安全保障设置 平台功能-聚石塔塔外测试方法 平台功能-子账号授权流程介绍(新) 平台功能-子账号授权改造升级介绍 平台功能-子账号授权改造升级影响范围 平台功能-Q&A 平台功能-API报表功能介绍 平台功能-API监控预警解释 常用工具-问题反馈系统 API异常排查方法 API相关工具使用说明 消息服务问题自助排查 2015大促保障 商品发布 类目属性度量衡 商品信息修改 库存同步 预扣库存 订单同步 天猫预售业务 拆单/子订单发货 物流发货 退款退货场景 关联营销场景介绍 客服绩效考核 电子凭证签名加密和解密 电子凭证发码sign验证 淘宝客API使用说明 直通车API介绍 DSP-API使用说明 云栈电子面单 多媒体平台API优化建议 数据加密简介 数据加密接入指南 账号体系接入方案 应用代码开发方案 密文字段检索方案 历史数据迁移方案 API字段加密文档 常见问题 数据加密培训视频 名词解释 名词解释-交易类型 名词解释-交易状态 授权签名与SDK API相关问题 沙箱问题解答 淘客和xtao ONS客户端 服务商帮助中心-服务商入驻 审核 服务市场 违规 新业务 质检服务 电商托管业务 自助服务 API技术服务费发票 我要投诉 流量申请 服务商身份变更

平台简介

媒体广告

其他

淘宝开放平台开发文档

浏览26275
更新时间2022-04-11

登录授权

      如果您的应用和淘宝开放平台对接时需要获取用户隐私数据(如商品、订单等),为保证用户数据的安全与隐私,您的应用需要取得用户的授权,即获取访问用户数据的授权令牌 Access Token (即原来的SessionKey)。这种情况下,您的应用需要引导用户完成使用淘宝帐号“登录授权”的流程。该流程采用国际通用的OAuth2.0标准协议作为用户身份验证与授权协议,支持网站、手机客户端、桌面客户端。
    目前淘宝OAuth2.0服务支持采用两种方式获取Access Token(授权令牌),即 Server-side flow 和 Client-side flow ,详见如下说明。

注:Taobao ID(淘帐号)产品不得用于阿里巴巴集团非官方渠道为淘宝买家提供淘宝会员类服务(如:订单查询、物流追踪 等),一旦发现违规使用,开放平台将立即收回该appkey的Taobao ID使用权限

 

特别注意

此文档描述的授权页面仅适用于PC端,如果您的页面是在手机淘宝/天猫客户端中被访问,请参考这里。如果您的页面是在H5手机浏览器中被访问,请参考这里。

 

一、Server-side flow

此流程要求ISV应用有Web Server应用,能够保存应用本身的密钥以及状态,可以通过https直接访问淘宝的授权服务器。

1、请求入口地址

1)获取授权码(code)
 正式环境:https://oauth.taobao.com/authorize
 沙箱环境:https://oauth.tbsandbox.com/authorize
2)获取访问令牌(access_token)
 正式环境:https://oauth.taobao.com/token
 沙箱环境:https://oauth.tbsandbox.com/token

2、授权操作步骤

    此处以正式环境获取acccess_token为例说明,如果是沙箱环境测试,需将请求入口地址等相关数据换成沙箱对应入口地址,操作流程则同正式环境一致。
    实际进行授权操作时,测试的数据 client_id、client_secret、redirect_uri 均需要根据自己创建的应用实际数据给予替换,不能拿示例中给出的值直接进行测试,以免影响实际测试效果。下图为Server-side flow 授权方式流程图,以下按流程图逐步说明。
TB1CBIbHpXXXXaIXpXXSutbFXXX.jpg

1)拼接授权url
拼接用户授权需访问url ,示例及参数说明如下:
https://oauth.taobao.com/authorize?response_type=code&client_id=23075594&redirect_uri=http://www.oauth.net/2/&state=1212&view=web

QQ截图20170213145452.png3)获取code2)引导用户登录授权
引导用户通过浏览器访问以上授权url,将弹出如下登录页面。用户输入账号、密码点“登录”按钮,即可进入授权页面。
TB1pwkRHpXXXXXLXpXXSutbFXXX.jpg

上图页面,若用户点“授权”按钮后,TOP会将授权码code 返回到了回调地址上,应用可以获取并使用该code去换取access_token;
若用户未点授权而是点了“取消”按钮,则返回如下结果,其中error为错误码,error_description为错误描述。分别如下图所示:TB1l1AfHpXXXXXDXXXXSutbFXXX.jpg

说明
可发布服务市场(fuwu.taobao.com)的应用,在应用上线后,如购买应用的用户,通过"我的服务--立即使用”访问(下图),系统会自动跳到授权页面(因此这种方式访问应用的,不需要拼接url),只需注意获取code即可。同时返回code时,还会返回通过state传递订购服务相关的信息,类似:
state=versionNo:1;itemCode:xxxxx (versionNo 为应用版本号、itemCode为应用收费代码)

4)换取access_token
利用linux 的curl 命令 获取access_token(授权令牌),如下;对于应用程序,可以参考文档**示例**这里的示例代码

curl -i -d "code=OxlukWofLrB1Db1M6aJGF8x2332458&grant_type=authorization_code&client_id=23075594&
client_secret=69a1469a1469a1469a14a9bf269a14&redirect_uri=http://www.oauth.net/2/ "https://oauth.taobao.com/token


QQ截图20170213145549.png

{
  "w2_expires_in": 0,
  "taobao_user_id": "263685215",
  "taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",
  "w1_expires_in": 1800,
  "re_expires_in": 0,
  "r2_expires_in": 0,
  "expires_in": 86400,
  "token_type": "Bearer",
  "refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",
  "access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",
  "r1_expires_in": 1800
}


换取access_token返回值示例

QQ截图20170213145648.png

二、Client-side flow

客户端应用授权方式,适合ISV没有独立的web Server,但是能够借助浏览器或者JS脚本访问授权服务器的应用。

1、请求入口地址

正式环境:https://oauth.taobao.com/authorize
沙箱环境:https://oauth.tbsandbox.com/authorize

2、授权操作步骤

以正式环境获取acccess_token为例说明,如果是沙箱环境请使用沙箱数据。
同时在授权过程中client_id等参数需要根据自己创建应用的实际数据给予替换,否则无法完成授权。
下图为Client-side flow 授权方式流程图,以下按流程图逐步详细说明TB1gIY_HpXXXXagXVXXSutbFXXX.jpg

1)拼接授权url

https://oauth.taobao.com/authorize?response_type=token&client_id=23075594&state=1212&view=web

QQ截图20170213145724.png


2)导用户登录授权
这一步同Server-side flow授权方式,引导用户访问授权url 进行授权,如下。

LB1c5YZKXXXXXamXFXXXXXXXXXX.jpg

3)获取access_token
此处上图页面点授权后,TOP会直接将access_token 返回到淘宝默认页面(和 Server-side flow 先返回code 再换access_token方式不同)此时可使用JS脚本(if(window.location.hash!=""){alert(window.location.hash)})可以获取回调页面#后面的字段,从而获取到访问令牌。

LB18bZlKXXXXXXdXXXXXXXXXXXX (1).jpg

返回参数示例:

https://oauth.taobao.com/oauth2?view=web#access_token=6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221&token_type=Bearer&expires_in=86400&refresh_token=6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221&re_expires_in=86400&r1_expires_in=86400&r2_expires_in=86400&taobao_user_id=263664221&taobao_user_nick=%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717&w1_expires_in=86400&w2_expires_in=86400&state=1212&top_sign=3429C556FCD3F3FC52547DD31021592F

注:
此处参数返回除 top_sign 外,同Server-side flow授权返回参数相同,这里不再详细描述,具体可参考 Server-side flow 里面的说明。
top_sign 是系统生成签名参数,使用 Client-side flow 方式授权需要对该参数进行一致性验证。


4) 验证授权签名

即验证返回参数和 top_sign 是否一致。如上返回参数中,把井号之后除 top_sign外所有key和value按照参数的首字母顺序排列,以 key1+value+key2+value....的方式拼接在一起,再在其前后加上的AppSecret(假设AppSecret=69a1469a1469a1469a14a9bf269a14),然后转成utf-8编码,接着进行md5加密,最后全部转大写即可。
md5(utf-8:AppSecret+k1+v1+k2+v2+...+kn+vn + AppSecret)。


如以下返回参数,取 # 号之后的参数进行拼接并首尾加上AppSecret后得到如下结果:
69a1469a1469a1469a14a9bf269a14access_token6101227f5e8c230696ac93a77b3de7daacb154c6ad98106263664221token_typeBearer
expires_in86400refresh_token6100627e3f9202c0960a6ab5bfd704939c91635892c70dd263664221re_expires_in86400r1_expires_in86400
r2expires_in86400taobao_user_id263664221taobao_user_nick%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B717w1_expires_in86400&w2_expires_in86400&state121269a1469a1469a1469a14a9bf269a14

进行md5加密(参考API调用示例代码)并转化成大写后得到:3429C556FCD3F3FC52547DD31021592F ,和top_sign 一致。

退出登录

退出流程目前只支持web访问,起到的作用是清除taobao.com的cookie,并不是取消用户的授权。在WAP上访问无效。

一、请求入口地址

1、正式环境:https://oauth.taobao.com/logoff
2、沙箱环境:https://oauth.tbsandbox.com/logoff
    
二、退出操作步骤

拼接退出url(如 https://oauth.taobao.com/logoff?client_id=12304977&view=web)并访问即可,退出后跳转到淘宝首页 。

刷新授权

通过授权获取的refresh_token,可用来刷新access token 的r2时长。
由于r1 或w1 通常同订购时长一致,一般不需刷新,w2必须通过重新授权给予延长,故refresh_token 一般仅用于r2 有效时长的延长。
操作方法类似获取access token ,仅请求参数有区别,说明如下:

QQ截图20170213145927.png

相关说明

一、授权时长说明

授权获得的 access_token 有效时长(expires_in )和标签类型(如IT工具、商家后台系统等)、状态(如正式环境、上线等)相关如下。
注:实际api 调用时,对应用授权时长做了更精确的控制,具体可参考(二、安全等级说明);另像“第三方IT工具”类应用开发上线后都是发布在 fuwu.taobao.com上,卖家需要订购使用,相应授权时长会和订购时长相同,如购买1个月,则取得的access_token有效时长1个月。

QQ截图20170213145956.png

二、安全等级说明

为了更加灵活的对淘宝开放平台开放的数据进行安全管控, 降低用户数据泄露或者被恶意修改的风险,推出了安全等级的概念。
淘宝开放平台对API(或者API字段)及 应用分别打了r1、r2、w1、w2 和 0,1,2,3四种安全级别的标记。与 r1、r2、w1、w2对应的是在access token(session key)颁发时增加了4个过期时间:r1_expires_in、r2_expires_in、w1_expires_in、w2_expires_in。这4个值分别用来表示此access token 调用各级别API(或字段)的有效期,如下:(受安全等级限制的应用有:第三方IT工具、服务商后台系统、店铺模块后台这3类应用;商家后台系统和新业务这类卖家自用型应用暂不受影响。)

安全等级 API级别 正式环境测试 上线运行中 是否可刷新 Refresh刷新时长
3级 R1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
3级 R2 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
3级 W1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
3级 W2 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
2级 R1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
2级 R2 24小时 72小时 已上线应用与订购时长一致,正式环境测试24小时有效
2级 W1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
2级 W2 30分钟 30分钟  
1级 R1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
1级 R2 24小时 24小时  
1级 W1 24小时 同订购时长 已上线应用与订购时长一致,正式环境测试24小时有效
1级 W2 5分钟 5分钟  
0级 R1 30分钟 30分钟  
0级 R2 0分钟 0分钟  
0级 W1 30分钟 30分钟  
0级 W2 0分钟 0分钟  

示例代码

一、获取access_token示例

示例代码均基于sdk实现,sdk下载及使用参考 说明。

1、JAVA 示例

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.taobao.api.internal.util.WebUtils; //引用top sdk
 public class open_oauth {
    public static void main(String[] args) {
      String url="https://oauth.taobao.com/token";
      Map<String,String> props=new HashMap<String,String>();
      props.put("grant_type","authorization_code");
/*测试时,需把test参数换成自己应用对应的值*/
      props.put("code","test");
      props.put("client_id","test");
      props.put("client_secret","test");
      props.put("redirect_uri","http://www.test.com");
      props.put("view","web");
      String s="";
      try{s=WebUtils.doPost(url, props, 30000, 30000);
      System.out.println(s);
      }catch(IOException e){
          e.printStackTrace();}
    } }


2、PHP 示例

<?php
/*测试时,需把test参数换成自己应用对应的值*/

 $url = 'https://oauth.taobao.com/token';
 $postfields= array('grant_type'=>'authorization_code',
 'client_id'=>'test',
 'client_secret'=>'test',
 'code'=>'test',
 'redirect_uri'=>'http://www.test.com');
 $post_data = '';
 
 foreach($postfields as $key=>$value){
 $post_data .="$key=".urlencode($value)."&";}
 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
 curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
 curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
 
 //指定post数据
 curl_setopt($ch, CURLOPT_POST, true);

 //添加变量
 curl_setopt($ch, CURLOPT_POSTFIELDS, substr($post_data,0,-1));
 $output = curl_exec($ch);
 $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
 echo $httpStatusCode;
 curl_close($ch);
 var_dump($output);
 
?>


3、.NET 示例

namespace Oauth2._0
{
    class Program 
    { 
    static void Main(string[] args)
        {
            WebUtils webUtils = new WebUtils(); 
            IDictionary<string, string> pout = new Dictionary<string, string>(); 
            pout.Add("grant_type", "authorization_code"); 
            pout.Add("client_id", "test"); 
            pout.Add("client_secret", "test"); 
            pout.Add("code", "test");
            pout.Add("redirect_uri", "http://www.test.com"); 
            string output = webUtils.DoPost("https://oauth.taobao.com/token", pout); 
            Console.Write(output); 
            Console.ReadLine();       
        }
    } 
}


二、refresh_token刷新示例
以下为基于sdk的java示例,其它语言可参考token获取方法,是类似的,同时测试时,需把test参数换成自己应用实际对应的值。

  import java.io.IOException;
  import java.util.HashMap;
  import java.util.Map;
  import com.taobao.api.internal.util.WebUtils;
 
  public class test_refresh {
     
  public static void main(String[] args) {
    String url="https://oauth.taobao.com/token";
    Map<String,String> props=new HashMap<String,String>();
    props.put("grant_type","refresh_token");
    props.put("refresh_token","test");
    props.put("client_id","test");
    props.put("client_secret","test");
    String s="";
    try{s=WebUtils.doPost(url, props, 30000, 30000);
    System.out.println(s);
    }catch(IOException e){
        e.printStackTrace();
    }
    }

以上把responseJson 转化为对象,或者直接从里面提取access_token字段以及新的刷新令牌
refresh_token返回结果内容示例

{    
      "w2_expires_in": 0,    
      "taobao_user_id": "263685215",    
      "taobao_user_nick": "%E5%95%86%E5%AE%B6%E6%B5%8B%E8%AF%95%E5%B8%90%E5%8F%B752",    
      "w1_expires_in": 1800,    
      "re_expires_in": 0,    
      "r2_expires_in": 0,    
      "expires_in": 86400,    
      "token_type": "Bearer",    
      "refresh_token": "6200e1909ca29b04685c49d67f5ZZ3675347c0c6d5abccd263685215",    
      "access_token": "6200819d9366af1383023a19907ZZf9048e4c14fd56333b263685215",    
      "r1_expires_in": 1800    
    }

常见问题

1、授权获取token时,appkey是已传入,仍报:client_id is empty 错误?
授权另一关键参数client_secret错误,会导报该错误,重点检查

2、是否一定需要沙箱先进行授权测试?

并不做这样要求,可以是“先沙箱测试授权,再正式环境”的方式;也可以直接“正式环境测试授权”的方式

3、授权相关常用文档有那些?

  • 多店铺管理:查看
  • 快速授权工具:查看
  • 提高安全等级办法:查看
  • 安全等级详细说明:查看

4、授权更多问题及错误码参考:查看

FAQ

  • 关于此文档暂时还没有FAQ

相关视频

更多

免费

php8,我来也
初级php8,我来也

34万次学习

收藏

免费

Thinkphp6.0正式版视频教程
中级Thinkphp6.0正式版视频教程

39.6万次学习

收藏

免费

细说PHP第一季
中级细说PHP第一季

31万次学习

收藏

精品课程

更多
前端入门_HTML5
前端入门_HTML5

共29课时

64.9万人学习

CSS视频教程-玉女心经版
CSS视频教程-玉女心经版

共25课时

41.2万人学习

JavaScript极速入门_玉女心经系列
JavaScript极速入门_玉女心经系列

共43课时

76.6万人学习

独孤九贱(1)_HTML5视频教程
独孤九贱(1)_HTML5视频教程

共25课时

64.1万人学习

独孤九贱(2)_CSS视频教程
独孤九贱(2)_CSS视频教程

共22课时

24.3万人学习

独孤九贱(3)_JavaScript视频教程
独孤九贱(3)_JavaScript视频教程

共28课时

36.2万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时

133.1万人学习

热门下载

更多
phpStudy 2018最新版
phpStudy 2018最新版

集成PHP7,16种组合,超全大合集

下载

VC9 32位
VC9 32位

VC9 32位 phpstudy集成安装环境运行库

下载

VC11 32位
VC11 32位

VC11 32位 phpstudy集成安装环境运行库​

下载

php程序员工具箱完整版
php程序员工具箱完整版

程序员工具箱 v1.0 php集成环境

下载

VC14 32位
VC14 32位

VC14 32位 phpstudy安装环境运行库

下载

SublimeText3汉化版
SublimeText3汉化版

中文版,非常好用

下载

Notepad++ Windows版
Notepad++ Windows版

Notepad++ 8.9.7 Windows版官方安装包,适合 Windows 用户进行代码编辑、文本处理、语法高亮和插件扩展配置。

下载