第三方登录_第三方登录sdk - CSDN
精华内容
参与话题
  • 第三方登录实现原理

    万次阅读 2020-04-05 21:54:50
    数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。 首先,我们先看一下 底层协议: OAUTH协议为用户资源的授权提供了...

    简单说,OAuth 就是一种授权机制。数据的所有者告诉系统,同意授权第三方应用进入系统,获取这些数据。系统从而产生一个短期的进入令牌(token),用来代替密码,供第三方应用使用。
    首先,我们先看一下
    底层协议:
    OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。oAuth是Open Authorization的简写。
    相关的术语
    一、三个URL:

    1. Request Token URL: 获取未授权的Request Token服务地址;
    2. User Authorization URL: 获取用户授权的Request Token服务地址;
    3. Access Token URL: 用授权的Request Token换取Access Token的服务地址;

    二、参数定义:
    4. OAUTH_consumer_key: 使用者的ID,OAUTH服务的直接使用者是开发者开发出来的应用。所以该参数值的获取一般是要去OAUTH服务提供商处注册一个应用,再获取该应用的OAUTH_consumer_key。
    5. OAUTH_consumer_secret:OAUTH_consumer_key对应的密钥。
    6. OAUTH_token:OAUTH进行到最后一步得到的一个“令牌”,通过此“令牌”请求,就可以去拥有资源的网站抓取任意有权限可以被抓取的资源。
    7. OAUTH_token_secret:OAUTH_token对应的私钥。
    8. OAUTH_signature_method: 请求串的签名方法,应用每次向OAUTH三个服务地址发送请求时,必须对请求进行签名。签名的方法有:HMAC-SHA1、RSA-SHA1与PLAINTEXT等三种。
    9. OAUTH_signature: 用上面的签名方法对请求的签名。
    10. OAUTH_timestamp: 发起请求的时间戳,其值是距1970 00:00:00 GMT的秒数,必须是大于0的整数。本次请求的时间戳必须大于或者等于上次的时间戳。
    11. OAUTH_nonce: 随机生成的字符串,用于防止请求的重复,防止外界的非法攻击。
    12. OAUTH_version: OAUTH的版本号。

    三、响应代码
    13. HTTP 400 Bad Request 请求错误
    14. Unsupported parameter 参数错误
    15. Unsupported signature method 签名方法错误
    16. Missing required parameter 参数丢失
    17. Duplicated OAUTH Protocol Parameter 参数重复
    18. HTTP 401 Unauthorized 未授权
    19. Invalid Consumer Key 非法key
    20. Invalid / expired Token 失效或者非法的token
    21. Invalid signature 签名非法
    22. Invalid / used nonce 非法的nonce
    四、认证流程:
    1. 获取未授权的request token
    请求参数:
    OAUTH_consumer_key:消费方键值。
    OAUTH_signature_method:消费方签署本请求所用的签名方法。
    OAUTH_signature:签名,定义于签署请求 (签署请求)。
    OAUTH_timestamp:定义于Nonceand Timestamp (单次值与时间戳)。
    OAUTH_nonce:定义于Nonceand Timestamp (单次值与时间戳)。
    OAUTH_version:可选。
    额外参数:由服务提供方定义的任意额外参数
    服务方返回结果,响应包含如下参数:
    OAUTH_token:请求令牌
    OAUTH_token_secret:令牌密钥
    附加参数:由服务提供方定义的任意参数。

    2. 获取用户授权的request token
    请求参数:
    OAUTH_token:可选。在前述步骤中获得的请求令牌。服务提供方可以声明此参数为必须,也可以允许不包含在授权URL中并提示用户手工输入。
    OAUTH_callback:可选。消费方可以指定一个URL,当 获取用户授权 (获取用户授权)成功后,服务提供方将重定向用户到这个URL。
    附加参数:由服务提供方定义的任意参数。
    服务提供方将用户引导回消费方。
    如果消费方在OAUTH_callback中提供了回调URL(在消费方引导用户至服务提供方 (消费方引导用户至服务提供方)中描述),则服务提供方构造一个HTTP GET请求URL,重定向用户浏览器到该URL,并包含如下参数:
    (1) OAUTH_token:被用户授权或否决的请求令牌
    (2) 回调URL可以包含消费方提供的查询参数,服务提供方必须保持已有查询不变并追加OAUTH_token参数。
    3. 用授权的request token换取Access Token
    消费方请求访问令牌参数:
    OAUTH_consumer_key:消费方键值。
    OAUTH_token:之前获取的请求令牌。
    OAUTH_signature_method:消费方使用的签署方法。
    OAUTH_signature:签署请求 (签署请求)中定义的签名。
    OAUTH_timestamp:在单次值与时间戳 (单次值与时间戳)中定义。
    OAUTH_nonce:在单次值与时间戳 (单次值与时间戳)中定义。
    OAUTH_version:版本号,可选。
    返回参数:
    OAUTH_token:访问令牌。
    OAUTH_token_secret:令牌密钥。
    4. 访问受保护资源
    请求参数:
    OAUTH_consumer_key:消费方键值。
    OAUTH_token:访问令牌。
    OAUTH_signature_method:消费方使用的签署方法。
    OAUTH_signature:签署请求 (签署请求)中定义的签名。
    OAUTH_timestamp:定义于单次值与时间戳 (单次值与时间戳).
    OAUTH_nonce:定义于单次值与时间戳 (单次值与时间戳).
    OAUTH_version:版本号,可选。
    附加参数:服务提供方指定的附加参数。
    授权流程:
    在这里插入图片描述
    OAUTH认证授权就三个步骤,三句话可以概括:
    1. 获取未授权的Request Token
    2. 获取用户授权的Request Token
    3. 用授权的Request Token换取Access Token

    当应用拿到Access Token后,就可以有权访问用户授权的资源了。大家可能看出来了,这三个步骤不就是对应OAUTH的三个URL服务地址嘛。一点没错,上面的三个步骤中,每个步骤分别请求一个URL,并且收到相关信息,并且拿到上步的相关信息去请求接下来的URL直到拿到Access Token。
    具体每步执行信息如下:
    使用者(第三方软件)向OAUTH服务提供商请求未授权的Request Token。向Request Token URL发起请求。(请求需要带上参数,前面说过)
    OAUTH服务提供商同意使用者的请求,并向其颁发未经用户授权的oauth_token与对应的oauth_token_secret,并返回给使用者。
    使用者向OAUTH服务提供商请求用户授权的Request Token。向User Authorization URL发起请求,请求带上上步拿到的未授权的token与其密钥。
    OAUTH服务提供商将引导用户授权。该过程可能会提示用户,你想将哪些受保护的资源授权给该应用。此步可能会返回授权的Request Token也可能不返回。如Yahoo OAUTH就不会返回任何信息给使用者。
    Request Token 授权后,使用者将向Access Token URL发起请求,将上步授权的Request Token换取成Access Token。请求的参数见上图,这个比第一步A多了一个参数就是Request Token。
    OAUTH服务提供商同意使用者的请求,并向其颁发Access Token与对应的密钥,并返回给使用者。
    使用者以后就可以使用上步返回的Access Token访问用户授权的资源。
    具体实现示例,请看我另一篇文章,保证看了不会后悔!
    https://blog.csdn.net/weixin_43885417/article/details/105102144

    展开全文
  • 第三方登录(QQ-Java版)

    千次阅读 2018-09-06 17:51:13
     这没啥可说的,无非就是想利用QQ庞大的用户群体,提高本站流量,达到快速扩充本站用户的效果,当然,无论是QQ登录,还是其它第三方登录方式,这些都是辅助效果,真正的目的还是需要绑定本站用户。 2.第三方登录所遵守的...

    1.为什么需要QQ登录网站?

            这没啥可说的,无非就是想利用QQ庞大的用户群体,提高本站流量,达到快速扩充本站用户的效果,当然,无论是QQ登录,还是其它第三方登录方式,这些都是辅助效果,真正的目的还是需要绑定本站用户。

    2.第三方登录所遵守的协议?

            这个我也不知道怎么说,反正就是,第三方登录,由于网站是个人或企业进行开发,这就有一个问题,我的网站用户的信息,怎么可以要其它企业知道呢?,所以啊,这就有了"第三者",意思就是,既然你们企业、个人信不过提供第三方登录的供应商,但又想用,没事,我oauth就做个好人,当当中间人,至于oauth的详细介绍,大家就去查查资料啦,反正就是这样啦...

    3.申请成为QQ互联开发者

            3.1.为什么需要申请QQ互联开发者?

                  这是肯定的啦,毕竟我们使用的是QQ互联啊

            3.2.申请步骤

                    3.2.1.QQ互联官网

                            

                            这里没啥可说的,该登录,该注册,自己看着办(我可是已经注册的)

                    3.2.2.申请成为开发者(审核需要1天时间,如果过了,联系客服)

                            

                            我这是已经是申请了的,无论通不通过,都会有一个测试使用的接口(只能自己QQ号登录),当然申请只是QQ需要知道你的基本信息。

                            如果是第一次使用QQ互联,请看下面

                                    A.填写开发者信息

                          

                                        因为这是已经是注册过的,有些步骤有些不一样,大家找到填写资料页就可以了,然后如实填写。注意,上传的身份主图片是本人手持身份证,然后上传图片。   

                                 如果审核通过,那么就下一步喽,如果没有,QQ互联会发送错误信息发送给你填写的邮箱,看错误信息,然后再进行修改,提交,也是一天审核时间。                

                                    B.创建网站应用

                                        

                                            填写资料:

                                                    1.这里的资料就随便填写

                                                             

                                                  2.回调域填写

                                                                

                                                    3.注册成功

                                                                

                       OK,如果创建应用成功,并且获取到了AppID与AppKey,那么就可以进行QQ登录开发了

    4.实现QQ互联需要的工具

                    4.1.放置QQ登录图标到页面(jsp\html)(这个无所谓,自己定义的也可以)

                       

                        不过值得注意的是,需要指定一个请求到我们自己编写的Controller或Servlet、Action,这个请求主要就是,

                        将QQ登录请求转发到QQ方,所以我们需要映射这个请求,再在我们自己的方法处理。

                    4.2.下载sdk

                        

                       找到基于Java的,然后下载,里面会有一个demo

                       SDK中的内容:

                               

                    Demo:

                            

                    核心要点:

                                

                           怎么我们前面放置的QQ登录图标中的请求?(demo中使用的servlet+jsp)

                            

                           那么它怎么跳转到QQ登录,以及怎么完成的回调呢?

                            这个问题呢,就得看下面啦

                    4.3.导入开发QQ互联所需要的文件,并配置

                            4.3.1.QQ互联依赖JAR包(添加到bin)

                                    

                            4.3.2.加入QQ互联配置文件到项目能够加载的地方(通常为src下)

                                    

                            4.3.3.修改配置文件

                                    

                    至此,QQ登录也就OK了,QQ登录成功之后,也就是在回调方法中,可以获取QQ用户的基本信息,什么头像、性别、别名,最重要的就是会返回一个OpenID,这个ID代表着QQ用户唯一标识,获取到这个OpenID,我们就可以进行处理一些东西了,比如通过OpenID查询数据库,如果用户存在这个OpenID,说明当前QQ用户已经绑定了本站用户,如果没有,就是绑定(登录或注册),只要携带这个OpenID到登录或注册页面,提交数据到登录或注册方法中,进行添加或更新操作。

                   4.4.3.怎么获取QQ用户的信息?

                            官网写得恶心了,我也是找了好久的资料,看了一些视频才知道的

                   // 获取AccessToken(AccessToken用于获取OppendID)
                AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
                // 用于接收AccessToken
                String accessToken = null, openID = null;
                // AccessToken有效时长
                long getExpireIn = 0L;
                getExpireIn = accessTokenObj.getExpireIn();
                // 获取AccessToken
                accessToken = accessTokenObj.getAccessToken();
                // 根据accessToken获取OpendId对象
                OpenID OpendIdObj = new OpenID(accessToken);
                // 通过对象获取[OpendId](OpendID用于获取QQ登录用户的信息)
                openID = OpendIdObj.getUserOpenID();
                // 通过OpenID获取QQ用户登录信息对象(Oppen_ID代表着QQ用户的唯一标识)
                UserInfo QQUserInfor = new UserInfo(accessToken, openID);
                // 获取用户信息对象(只获取nickename与Gender)
                UserInfoBean userInfoBean = QQUserInfor.getUserInfo();

       如果还是不行的话,想想哪个地方错了,没有按照步骤来,实在不行,还是看下面吧。

    5.具体实现(基于SSM;Spring+SpringMVC+Mybatis)

        5.1.放置QQ登录按钮与请求

                <!-- QQ登录 -->
                                          <a  href="${pageContext.request.contextPath}/QQlogin">
                                              <img src="${pageContext.request.contextPath}/images/Connect_logo_4.png" title="QQ登录"  alt="QQ登录"/>
                                          </a>

        5.2.映射QQ登录请求

                    /**
         * 跳转QQ登录
         */
        @RequestMapping(value = "/QQlogin", method = RequestMethod.GET)
        public void QQLogin(HttpServletRequest requeset, HttpServletResponse response) throws IOException {
            // 响应编码
            response.setContentType("text/html;charset=utf-8");
            // 跳转QQ登录页面
            try {
                response.sendRedirect(new Oauth().getAuthorizeURL(requeset));
            } catch (QQConnectException e) {
                e.printStackTrace();
            }
        }

        5.3.导入sdk与qqconnectconfig.properties并修改

        5.4.编写QQ回调函数

                /**
         * QQ登录成功后回调
         *
         * @param requeset
         * @param response
         * @return
         */
        @RequestMapping(value = "/AfterQQLogin")
        public String AfterQQLogin(HttpServletRequest request, HttpServletResponse response) throws IOException {
            
            // 存储用户信息
            Map<String, String> userinfor = null;
            //
            response.setContentType("text/html; charset=utf-8");
            try {
                // 获取AccessToken(AccessToken用于获取OppendID)
                AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);

                // 用于接收AccessToken
                String accessToken = null, openID = null;

                // AccessToken有效时长
                long getExpireIn = 0L;
                getExpireIn = accessTokenObj.getExpireIn();

                // 获取AccessToken
                accessToken = accessTokenObj.getAccessToken();
                // 根据accessToken获取OpendId对象
                OpenID OpendIdObj = new OpenID(accessToken);

                // 通过对象获取[OpendId](OpendID用于获取QQ登录用户的信息)
                openID = OpendIdObj.getUserOpenID();

                // 通过OpenID获取QQ用户登录信息对象(Oppen_ID代表着QQ用户的唯一标识)
                UserInfo QQUserInfor = new UserInfo(accessToken, openID);

                // 获取用户信息对象(只获取nickename与Gender)
                UserInfoBean userInfoBean = QQUserInfor.getUserInfo();

                // 通过信息对象获取参数
                // 别名
                String nickname = userInfoBean.getNickname();
                // 性别
                String gender = userInfoBean.getGender();
                gender = gender.equals("男") ? "0" : "1";
                // 用户头像对象
                Avatar avatar = userInfoBean.getAvatar();
                // 获取用户头像URL
                String head = avatar.getAvatarURL100();

                // 是否获取用户信息成功 0 成功 1不成功
                int result = userInfoBean.getRet();

                if (result != 0) {
                    // 没有正确获取用户信息,获取错误消息
                    String mes = userInfoBean.getMsg();
                    request.setAttribute("errors", mes);
                    return "index";
                }

                // 获取用户信息成功,将信息存储作用域
                userinfor = new HashMap<String, String>();
                userinfor.put("nickname", nickname);
                userinfor.put("gender", gender);
                userinfor.put("openId", openID);
                userinfor.put("head", head);

                // 通过OppendID查询数据库
                MapData user = userService.findUserByOpenID(openID);
                if (user != null) {// 已经与本地用户绑定
                    //获取数据库信息
                    String dbusername = user.getString("username");
                    String dbphone = user.getString("phone");
                    String dbpassword = user.getString("password");
                    if(dbphone == null && dbusername == null){
                        return "UserBind";
                    }
                    //已绑定手机或用户名
                    opendLogin(dbusername, dbpassword, null, null, dbphone,"oauth", request, response);
                    String id = user.getString("id");
                    String head_path = user.getString("head_path");
                    String genderdb  = user.getString("sex");
                    String nicknamedb =  user.getString("nickname");
                    //将qq用户信息填写到数据库
                    if(head_path == null || "".equals(head_path)){
                        head_path = head;
                    }
                    if(genderdb == null || "".equals(genderdb)){
                         genderdb = gender;
                    }
                    if(nicknamedb == null || "".equals(nicknamedb)){
                        nicknamedb = nickname;
                    }
                    //更新
                    userService.updateUserByQQ(nicknamedb, head_path, genderdb,openID,id);
                    
                    //插入日志
                    //logservice.insertLog(null, 2, new Date(), Integer.parseInt( id ), 0, nickname + "QQ用户登录", 2);
                    
                    return "redirect:/PersonCental";
                }
            } catch (QQConnectException e) {
                e.printStackTrace();
            }
                        // 不存在openID,代表着本地用户是没有与QQ进行绑定的,所以需要QQ互联的用户进行注册,如果不注册,无法关联本地用户
                        // 跳转到用户绑定页面,并且携带从QQ方获取到的信息
                        request.setAttribute("userinfor", userinfor);
                        return "UserBind";
    }

        5.5.OJBK奋斗

    如果还还还还还还还还还还还....不行,没事,洗洗睡吧....

     写这个文章呢,主要是自己碰到了,花了不少时间,一是方便后期回顾,二是,希望帮各位填填坑,就无需再在这花大量时间了。

    备注:如要转载,请备注原地址(毕竟写了一个多小时)

    展开全文
  • 第三方登陆功能的实现

    千次阅读 2017-12-25 10:43:14
    所谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。第三方登录主要省略了很多注册流程,这对于用户而言体验更加顺畅,通过这技术可以获得大量用户,用户一般也不愿意...

    所谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。第三方登录主要省略了很多注册流程,这对于用户而言体验更加顺畅,通过这技术可以获得大量用户,用户一般也不愿意注册过多的账号,通常习惯于将多个平台的账号密码设置成相同的方便记忆,所以我们也是抓住了用户的这一习惯,来应用了第三方登陆。下面开始进入正题。


    1.我们这里是使用的百度第三方登陆,首先要注册这个 " 百度开发者中心 " 平台的账户,用于接下来的开发调用。然后点击你账户上面的应用管理进行创建工程,创建工程只需要输入工程名就可以,然后点击提交。

    2.创建好工程,里面的基本信息有两个key一个API Key(client_id)和Secret Key(client_secret),获取到这两个key可以在之后的调用地址中使用到,现在根据授权应用场景来找到图中被我圈住的地方,将下面这个地址引用到你的前台页面中,给一个a标签填入href中进行点击调用,将之前所获取的API Key填入,再填入你的回调地址如http://10.2.21.10:8080/getCode,这是我的回调地址,中间的IP就是你的本地IP,然后在标签中可以随便引入一个logo图标来进行点击去调用百度第三方登陆。


    3.接下来就是在调用第三方登陆之前,需要将你的回调地址进行启动授权回调页的操作。这里主要就是将你的回调地址进行一个安全绑定,使百度第三方应用可以对你的回调地址进行相应。将你的回调地址放入图中的位置,其他的不需要填,直接点击确定,弹出保存成功即可。




    4.这个就是我们在点击你之前在项目中自定义的logo后去根据回调地址去进行的登陆授权,点击登陆并授权后跳转回调地址页面,这个回调地址去调用这个getCode方法并获取code参数。


    5.在同意授权并且获取code参数后将code与回调地址放入下面这个被我圈住的地址中,使用httpclient访问这个地址后获取到access_token。





    根据access_token获取用户信息,把用户信息存入到数据库中,然后这个用户就是你平台的用户了。

    到这里第三方登陆就完成了。希望能够给大家带来帮助。


    展开全文
  • 如何实现第三方登录

    千次阅读 2018-09-19 16:49:22
    登录成功,右上方就可以出现一个,申请记录       4、进入百度云官网       5、注册成功后,点击应用管理,创建工程       6、创建成功后,出现这个界面     其中API KEY 和...

    1、百度搜索百度开发者中心

    2、登陆开发者中心

    3、如果有账号就可以直接登录,如果没有就注册一个,手机号就可以注册.

    登录成功,右上方就可以出现一个,申请记录

     

     

     

    4、进入百度云官网

     

     

     

    5、注册成功后,点击应用管理,创建工程

     

     

     

    6、创建成功后,出现这个界面

     

     

    其中API KEY 和Secret Key,后面会用到。

    7、创建成功后,出现这个界面

     

     

    8、找到列表中的安全设置

     

     

    授权回调页是指当在第三方登录过后,页面跳转到授权回调页界面。

    根域名绑定自己申请的域名,IP地址写自己备案的服务器IP即可。

    9、在eclipse中创建一个web工程,在webcontent中创建一个jsp文件叫做index

     

    代码如下

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <script type="text/javascript">
            function bdlogin(){
       location.href="https://openapi.baidu.com/oauth/2.0/authorize?response_type=code&client_id=pUeLIDKF2af5sfQHLdA21D7u&redirect_uri=http://www.lijunzheworld.top/disanfang/BaiDuServelt&display=popup";
            }
    </script>
    <body>
    <input type="button" value="百度登录" οnclick="bdlogin()">
    </body>
    </html>

     

    注意其中的client_id为啊刚才创建的工程的API KEY,redirect_uri为百度第三方登录网站。

    创建好后再创建一个名为result的jsp文件里面随便写一些内容即可,后面才会用到。

    10、将web.xml中的除了index.jsp的weclome-file文件全部删除,方便以后在输入网址时直接进入index.jsp文件

    11、在src在src中创建一个servelt文件。

    代码如下

    import java.io.IOException;
    import java.util.Map;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;

    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.TypeReference;

    public class BaiDuServelt extends HttpServlet {

        private static final long serialVersionUID = 1L;

        protected void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doPost(request, response);
        }

        protected void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            String code = request.getParameter("code");
            String redirect_uri = "http://www.lijunzheworld.top/disanfang/BaiDuServelt";
            String client_secret = "o9d18nDzdYqWmX5oadHfG4SbXbMnGKx7";
            String client_id = "pUeLIDKF2af5sfQHLdA21D7u";
            String url1 = "https://openapi.baidu.com/oauth/2.0/token?grant_type=authorization_code&code=" + code
                    + "&client_id=" + client_id + "&client_secret=" + client_secret + "&redirect_uri=" + redirect_uri + "";

            String content1 = "";

            try {
                // 创建一个HttpClient对象
                CloseableHttpClient httpClient = HttpClients.createDefault();
                // 创建一个Get请求
                HttpGet getReq = new HttpGet(url1);

                getReq.addHeader("Accept",
                        "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8    ");
                getReq.addHeader("Accept-Encoding", "gzip, deflate, sdch, br");
                getReq.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
                getReq.addHeader("Cache-Control", "max-age=0");
                getReq.addHeader("Connection", "keep-alive");
                getReq.addHeader("Host", "openapi.baidu.com");
                getReq.addHeader("User-Agent",
                        "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");

                HttpResponse res = httpClient.execute(getReq);

                HttpEntity entity = res.getEntity();
                content1 = EntityUtils.toString(entity, "UTF-8");

            } catch (Exception e) {
                e.printStackTrace();
            }

            Map<String, Object> map = JSON.parseObject(content1, new TypeReference<Map<String, Object>>() {
            });
            String access_token = (String) map.get("access_token");

            print(access_token, request, response);
        }

        public void print(String access_token,HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String content = "";
            String url = "https://openapi.baidu.com/rest/2.0/passport/users/getInfo?access_token=" + access_token + "";
            try {
                // 创建一个HttpClient对象
                CloseableHttpClient httpClient = HttpClients.createDefault();
                // 创建一个Get请求
                HttpGet getReq = new HttpGet(url);

                getReq.addHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8    ");
                getReq.addHeader("Accept-Encoding", "gzip, deflate, sdch, br");
                getReq.addHeader("Accept-Language", "zh-CN,zh;q=0.8");
                getReq.addHeader("Cache-Control", "max-age=0");
                getReq.addHeader("Connection", "keep-alive");
                getReq.addHeader("Host", "openapi.baidu.com");
                getReq.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36");

                HttpEntity entity = httpClient.execute(getReq).getEntity();
                content = EntityUtils.toString(entity, "UTF-8");
                System.out.println(content);
            } catch (Exception e) {
                e.printStackTrace();
            }

            Map<String, Object> map = JSON.parseObject(content, new TypeReference<Map<String, Object>>() {});
            System.out.println(map);

            String baiduid = (String) map.get("userid");
            System.out.println(baiduid);
            //List list = JdbcUtils.getList(User.class, "select * from user where baiduid=" + baiduid);

    //        if (list.size() == 0) {
            request.setAttribute("message", map);
            request.getRequestDispatcher("/result.jsp").forward(request, response);
    //        } else {
    //            User user = (User) list.get(0);
    //            req.getSession().setAttribute("UserInfo", user);
    //            req.getRequestDispatcher("/success.jsp").forward(req, res);
    //        }
        }

    }

     

    如果要登陆你自己的界面的话只需要改变三个地方即可。

     

    redirect_uri :自己设置的接口回调页

    client_secret:你创建的工程的secret key

    client_id :你自己创建的工程的API KEY

    12、工程引包

     

     

    这些包都可以在百度中找到,一个是fastjson包 另一个是httpclient包,在网上下载,引入工程即可。

    12、完成后将工程导出war包,登陆远程服务器

     

     

    将war包复制到tomcat文件夹的webapps中

     

    运行tomcat将其发布,然后回到自己的电脑打开网页输入自己注册的域名

     

     

    出现该界面点击,继续操作,若出现result文件中的数据则第三方登录成功。

    展开全文
  • 第三方账号登录功能接入完全流程

    万次阅读 多人点赞 2019-04-11 14:51:14
    我们公司的用户中心之前没有接入第三方账号登录,虽然之前已经向公司提出过产品需求,因公司有一些战略考虑,也一直没有启动。这次趁着新游戏的接入工作,终于把这个项目提上日程。作为产品经理,我负...
  • 第三方登录的原理

    万次阅读 2016-10-21 18:29:49
    摘要:OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。...同时,任何第三方都可以使用OAUTH认证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的。业界提供了OAUTH的
  • 第三方登录过程分析

    千次阅读 2019-06-30 01:10:48
    第三方登录原理解析 其实,第三方登录的模式都大同小异,基本都是OAuth2.0模式,我们以新浪微博的第三方登录举例: 新浪微博登录 官方文档:https://open.weibo.com/wiki/授权机制说明 我们来根据流程图一步步...
  • 现在有很多应用网站等等都支持第三方登录,例如我们都在用的qq、微信、支付宝等都能实现一键登录方便了很多,我们今天来讲一下QQ登录 第三方登录其实就是获取用户授权后的的头像账号等等,作为登陆的一个凭证。 要想...
  • 第三方登录的实现

    千次阅读 2019-04-12 10:30:05
    业内现在第三方注册的流程一般是什么样的? 前端通过授权方式获取第三方账号对应的unionId或openId,把它传给应用服务器,服务器判断这个第三方id有没有注册过如果没有就创建一个对应的新账号。 问题是,按照上面...
  • 1. 【我的电脑】右键,点击【属性】,打开系统属性,选择左上角【控制... 单击【网络和Internet】,3. 单击【Internet选项】4. 选择【连接】右下角的【局域网设置】5. 取消所有勾选,单击【确定】应用重新设置即可。...
  • 以前在配置thunderbird时,发现死活不对。当时也没找出是什么原因。今天偶然知道为什么了,就是网易163使用第三方客户端登录需要使用授权码,而不是你正真的密码。 使用授权码登录就可以正常收发邮件了。
  • https://jingyan.baidu.com/article/4f34706e9249d1a386b56d3a.html 注意需要重启浏览器或者电脑,我是重启浏览器就可以了,没有重启电脑
  • Android记录16-友盟第三方登录、分享实现

    万次阅读 多人点赞 2015-01-26 17:19:17
    Android开发记录16-友盟第三方登录、分享实现 本篇博客给大家分享一个笔者正在做的关于第三方登录、分享的实例,这里选用的是友盟社会化组件。 博客大纲如下:第三方登录流程友盟支持第三方登录的平台友盟社会化分享...
  • 第三方登录授权说明

    万次阅读 2014-03-26 10:24:08
    名词说明: ... access_toekn::授权成功后返回的token,用于调用第三方Api AppId:接入第三方应用的唯一ID,在第三方开放平台...第三方登录的主要作用: 1、使用第三方账号信息来初始化自己的账号(昵称、头像等信息
  • 前言:如何快速接入第三方登录?无需第三方审核认证授权,一次性接入多个平台的解决方案, 此处实现使用SpringBoot+vue 实现此效果 1.申请接入应用 http://open.51094.com/ 按需选择接入的类型 填写应用信息 完成...
  • JAVA WEB 实现第三方登录 -- qq篇

    万次阅读 热门讨论 2017-04-09 16:38:49
    实验室F老师,下达任务,让我实现一个第三方登录的任务 任务提示:oauth这个东西弄了我好长时间,不是因为难,而是腾讯开发者申请来来回回的,耗费时间比较长。所以看到这里,需要做第三方的话,啥也别说,先去注册...
  • 第三方登录功能的实现

    万次阅读 多人点赞 2017-03-28 17:13:04
    为什么要使用第三方登录:一般稍微作为一个大点的项目,为了提高用户的群体都会做第三方登录(如:QQ,微信,新浪等) 在往下看之前先注册第三方网站的开发者账号,创建应用完成审核。 QQ : QQ开发者平台 微信: 微信...
  • 第三方登录---微信登录

    万次阅读 2018-02-06 16:20:36
    由于某一个误导,误打误撞的实现了微信登录...(其实是要实现第三方平台授权的...在此只写一个简单的小demo,是想告诉大家这个第三方登录其实很简单,没有想象的那么难。大家还是要多看官方文档。 首先也是最重要的:微
  • 添加过滤器private Filter ssoFilter() { CompositeFilter filter = new CompositeFilter(); List&lt;Filter&gt; filters = new ArrayList&lt;&... filters.add(ssoFilter(facebook(), "...
  • 百度云管家使用QQ第三方登录时提示“由于网络原因无法载入页面 请点击刷新后重试” 首先网络是没问题,怎么会出现这个奇怪问题, 上网找原因后,各种说法。 试了好几种说法。 其中是通过解决IE浏览器然后解决了这...
1 2 3 4 5 ... 20
收藏数 188,731
精华内容 75,492
关键字:

第三方登录