|
登录实现流程:
此流程要求第三方网站的应用(以下简称“应用”)是有Server的Web应用,能够保存应用本身的密钥以及状态,可以通过https直接访问淘宝的授权服务器。
该流程分三个步骤:
第一步:通过用户授权获取授权码Code;
第二步:用上一步获取的Code和应用密钥(AppSecret)通过Https Post方式换取Token。
第三步:获取用户Nick或者其他信息
一、获取授权码Code应用在要求获取用户信息的时候,首先引导用户(Redirect)到登录授权页面https://oauth.taobao.com/authorize
需要传的参数有
名称
| 是否必需
| 描述
| response_type
| Y
| 此处为web应用,此值固定为code
| client_id
| Y
| 即创建应用时的Appkey
| redirect_uri
| Y
| 登录后的回调地址,(注意:此地址必须要与注册应用时的回调地址相匹配,匹配规则是:注域名完全匹配
| state
| N
| 该参数由应用定义,用户授权后,授权服务器会原封不动将此参数返回。
注: 应用可通过可选参数state来记录用户当前所处的页面位置信息,方便用户登录授权后,页面回调到用户之前所处的位置。
|
例如: https://oauth.taobao.com/authori ... .xx.org&state=1
用户登陆后,显示用户授权页面:
此时,用户可以选择“授权”或者“取消”(即不同意授权)。
如果用户同意授权,则跳转到应用的回调地址(redirect_uri),同时,应用获得授权码code
如果用户取消授权或者访问出错
二、用授权码Code换取Token应用在获取授权码后,发送Https Post到授权服务器,授权服务器验证授权码的合法性和应用的AppSecret,验证通过后授权服务器返回Access Token给应用。
需要传的参数有:
名称
| 是否必需
| 描述
| grant_type
| Y
| 授权类型 authorization_code 或者 refresh_token
| code
| Y
| 授权请求中的授权码,即第一步获取到的code
| redirect_uri
| Y
| 登录后的回调地址,(注意:此地址必须要与注册应用时的回调地址相匹配,匹配规则是:注域名完全匹配
| client_id
| Y
| 客户标识,即appkey
| client_secret
| Y
| 客户密钥,即appsecret
|
以下为java代码实现授权:
第一步:
在网站设置登陆入口- <A class="g6" title=会员登录
- href="https://oauth.taobao.com/authorize?client_id=12381144&response_type=code&state=1&redirect_uri=http://localhost:2011/WinTaobao/do.jsp" target="_blank">
- 登录</A>
复制代码 第二步,在redirect网站接受登录后返回的code,并获得access_token,使用淘宝api获取登陆的用户名,将此用户名设置到session中:- if(request.getParameter("code") != null && !request.getParameter("code").equals("")){
- String url ="https://oauth.taobao.com/token";
- Map<String, String> props = new HashMap<String, String>();
- props.put("grant_type","authorization_code");
- props.put("code", request.getParameter("code"));
- System.out.println(request.getParameter("code"));
- props.put("client_id", "*appkey*");
- props.put("client_secret", "*appsecret*");
- props.put("redirect_uri", "http://localhost:2011/WinTaobao/do.jsp");
-
- String s = "";
- try{
- //WebUtils平台SDK封装
- s = WebUtils.doPost(url, props, 30000, 30000);
- }catch(IOException e){
- e.printStackTrace();
- }
-
- String access_token = "";
- String nick="";
- JSONObject jb;
- System.out.println(s);
- try{
- //解析获取token
- jb = new JSONObject(s);
- //判断是否获取到token,若获取失败,可以根据返回的错误描述排查
- if(!jb.has("error")){
- access_token = jb.getString("access_token");
- System.out.println("token:"+access_token);
- //获取当前登录用户nick等数据,access_token就相当于sessionKey,后续调用其他接口可以直接使用
- TaobaoClient client = new DefaultTaobaoClient("http://gw.api.taobao.com/router/rest","*appkey*","*appsecrect*");
- UserGetRequest req = new UserGetRequest();
-
- req.setFields("user_id,uid,nick");
- UserGetResponse resp = client.execute(req,access_token);
- if(resp.isSuccess()){
- //获取nick
- nick = resp.getUser().getNick();
- session.setAttribute("nick",nick);
- response.sendRedirect(path+"/index.html");
- }
- }
- }catch(JSONException e){
- e.printStackTrace();
- }catch(ApiException e){
- e.printStackTrace();
- }
- }
-
- if(request.getParameter("error") != null && !request.getParameter("error").equals("")){
- System.out.println(request.getParameter("error_description"));
- }
复制代码 第三步,在返回的页面中获取session中的nick,也就代表网站已经登陆了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|