精华内容
下载资源
问答
  • 第三方登录功能的实现

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

    刚开始做的时候感觉高大上
    为什么要使用第三方登录:

    一般稍微作为一个大点的项目,为了提高用户的群体都会做第三方登录(如:QQ,微信,新浪等)
    

    在往下看之前先注册第三方网站的开发者账号,创建应用完成审核。

    1. QQ : QQ开发者平台
    2. 微信: 微信开发者平台
    3. 新浪: 新浪开放平台

    要实现第三方登录的功能首先要明白oauth2.0的认证原理,由于第三方登录的认证授权流程大致都是一样的,在这里我只讲QQ的登录授权流程:

    官网也有介绍:
    这里写链接内容

    其授权验证流程示意图如下:
    这里写图片描述

    1. client先访问:PC网站:https://graph.qq.com/oauth2.0/authorize
      参数有: response_type=code 固定
      client_id 申请应用时分配的id
      redirect_uri 回调的url 你自己网站的一个地址

    2. 通过第一步会返回 code码(注意:此code会在10分钟内过期)

    3. 通过Authorization Code获取Access Token(通过地址:https://graph.qq.com/oauth2.0/token?)
      此时参数有:
      grant_type
      client_id
      client_secret: 申请QQ登录成功后,分配给网站的appkey。
      code: 上一步返回的authorization code。
      redirect_uri

    4. 此刻你已经拿到了Access Token , 然后就是获取用户OpenID_OAuth2.0
      https://graph.qq.com/oauth2.0/me?access_token=获取到的Access Token
    5. 根据第4步你会拿到(openid): callback( {“client_id”:”YOUR_APPID”,”openid”:”YOUR_OPENID”} );
    6. 最后就是回去你的用户信息了:
      https://graph.qq.com/user/get_user_info?access_token=YOUR_ACCESS_TOKEN&oauth_consumer_key=YOUR_APP_ID&openid=YOUR_OPENID

    返回结果:

    {
    “ret”:0,
    “msg”:”“,
    “nickname”:”YOUR_NICK_NAME”,

    }
    下面直接看代码(控制层):

    /**
     * 
     * 首页
     * 
     * @author Administrator
     *
     */
    @Controller
    @RequestMapping("/qqLogin")
    public class HomePageController {
    
        @RequestMapping("/login")
        public String login(HttpServletRequest request, HttpServletResponse response, HttpSession session)
                throws IOException {
            try {
                AccessToken accessTokenObj = (new Oauth())
                        .getAccessTokenByRequest(request);
                String accessToken = null, openID = null;
                if (accessTokenObj.getAccessToken().equals("")) {
                    System.out.print("没有获取到响应参数");
                    return "error";
                } else {
                    accessToken = accessTokenObj.getAccessToken();
                    session.setAttribute("accessToken",
                            accessToken);
                    // 利用获取到的accessToken 去获取当前用的openid 
                    OpenID openIDObj = new OpenID(accessToken);
                    openID = openIDObj.getUserOpenID();
                    session.setAttribute("openID", openID);
                    return "success";
                }
            } catch (QQConnectException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
                return "error";
            }
        }
    
        @RequestMapping("/homePage")
        public String homePage(Model model) {
    
            return "index";
        }
    
        @RequestMapping("/inQQ")
        public void inQQ(Model model, HttpServletResponse response,
                HttpServletRequest request) {
            try {
                response.sendRedirect(new Oauth().getAuthorizeURL(request));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (QQConnectException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    

    视图层:

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%-- <%@include file="/inc/taglib.jsp"%> --%>
    <body>
    <h2>Hello World!ss</h2>
    
        <a href="${pageContext.request.contextPath} /qqLogin/inQQ">请使用你的QQ账号登陆</a>
    
    </body>
    

    记得别忘了导包
    解开来见证奇迹的时刻到了:
    这里写图片描述
    这里写图片描述
    这里写图片描述

    至此结束!!!!!!!!
    

    有需要源码的留下qq邮箱

    展开全文
  • 今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录、腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一、准备工作 1、登录 码云官网 官网地址:https://gitee.com/ 注册、登录我们的...

    今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单

    一、准备工作

    官网地址:https://gitee.com/
    

    注册、登录我们的账号

    • 2、创建应用
      设置
      在右上角菜单找到 “设置” 选项
      第三方应用
      在 “安全设置” 下找到 “第三方应用”
      我的应用
      点击 “创建应用” 开始创建第三方应用
      创建应用信息
      按照要求填写应用信息即可
      应用详情
    • 3、将应用信息保存到项目中
      应用配置信息
      由于我使用的是 SpringBoot 项目,我放在了 application.yml 文件中

    二、开始开发

    • 1、引入 Maven 依赖
    <!-- 网络请求 -->
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpclient</artifactId>
    	<version>4.5.6</version>
    </dependency>
    <!-- alibaba的fastjson -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.51</version>
    </dependency>
    

    其余的依赖请自行加入

    • 2、在页面放置 “码云(Gitee)” 授权登录的 DOM 元素
    <a th:href="@{gitee/auth}" class="link" title="Gitee登录"><i class="iconfont icon-gitee"></i></a>
    

    这里使用的是阿里的 iconfont 图标

    三、接口类

    创建 “码云(Gitee)” 授权登录的 Controller,GiteeController.java

    • 1、从配置文件中获取 “码云(Gitee)” 配置信息
    /**
     * gitee授权中提供的 appid 和 appkey
     */
    @Value("${gitee.oauth.clientid}")
    public String CLIENTID;
    @Value("${gitee.oauth.clientsecret}")
    public String CLIENTSECRET;
    @Value("${gitee.oauth.callback}")
    public String URL;
    
    • 2、页面登录按钮点击后的接口
    /**
     * 请求授权页面
     */
    @GetMapping(value = "/auth")
    public String qqAuth(HttpSession session) {
        // 用于第三方应用防止CSRF攻击
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        session.setAttribute("state", uuid);
    
        // Step1:获取Authorization Code
        String url = "https://gitee.com/oauth/authorize?response_type=code" +
                "&client_id=" + CLIENTID +
                "&redirect_uri=" + URLEncoder.encode(URL) +
                "&state=" + uuid +
                "&scope=user_info";
    
        return PasswordUtils.redirectTo(url);
    }
    

    接口文档中建议我们在授权登录时传入一个加密的数据防止被攻击,我们传入了UUID,最后重定向到授权页面
    授权页面

    • 3、当该用户点击“授权”按钮,同意授权后,就会回调到我们在应用中填写的回调地址里去
    /**
     * 授权回调
     */
    @GetMapping(value = "/callback")
    public String qqCallback(HttpServletRequest request) throws Exception {
        HttpSession session = request.getSession();
        // 得到Authorization Code
        String code = request.getParameter("code");
        // 我们放在地址中的状态码
        String state = request.getParameter("state");
        String uuid = (String) session.getAttribute("state");
    
        // 验证信息我们发送的状态码
        if (null != uuid) {
            // 状态码不正确,直接返回登录页面
            if (!uuid.equals(state)) {
                return PasswordUtils.redirectTo("/login");
            }
        }
    
        // Step2:通过Authorization Code获取Access Token
        String url = "https://gitee.com/oauth/token?grant_type=authorization_code" +
                "&client_id=" + CLIENTID +
                "&client_secret=" + CLIENTSECRET +
                "&code=" + code +
                "&redirect_uri=" + URL;
        JSONObject accessTokenJson = GiteeHttpClient.getAccessToken(url);
    
        // Step3: 获取用户信息
        url = "https://gitee.com/api/v5/user?access_token=" + accessTokenJson.get("access_token");
        JSONObject jsonObject = GiteeHttpClient.getUserInfo(url);
        /**
         * 获取到用户信息之后,就该写你自己的业务逻辑了
         */
        return PasswordUtils.redirectTo("/success");
    }
    

    四、网络请求方法

    上面回调方法中所用到的网络接口方法,我放在了 GiteeHttpClient.java 文件中,主要有两个方法

    • 1、网络接口
    /**
     * 获取Access Token
     * post
     */
    public static JSONObject getAccessToken(String url) throws IOException {
        HttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
        HttpResponse response = client.execute(httpPost);
        HttpEntity entity = response.getEntity();
        if (null != entity) {
            String result = EntityUtils.toString(entity, "UTF-8");
            return JSONObject.parseObject(result);
        }
        httpPost.releaseConnection();
        return null;
    }
    
    /**
     * 获取用户信息
     * get
     */
    public static JSONObject getUserInfo(String url) throws IOException {
        JSONObject jsonObject = null;
        CloseableHttpClient client = HttpClients.createDefault();
    
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
        HttpResponse response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
    
        if (entity != null) {
            String result = EntityUtils.toString(entity, "UTF-8");
            jsonObject = JSONObject.parseObject(result);
        }
    
        httpGet.releaseConnection();
    
        return jsonObject;
    }
    

    分别就是使用 code 获取 token,在使用 token 获取 用户信息

    注意:我们需要在请求时加上请求头

    User-Agent Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36
    

    最终我们获取到一个 JSON 对象,该对象包含了用户的信息,例如:id,name,email,phone 等等。

    https://gitee.com/api/v5/oauth_doc#/
    

    五、总结

    该授权认证过程符合 OAuth2 认证基本流程,流程如下:
    授权过程

    1、用户点击页面登录按钮,请求授权页面,用户在此页面登录账号并同意授权
    2、用户同意授权后,回调至我们项目中,首先验证 state 是否一致
    3、使用上一步拿到的 code 请求 access_token
    4、使用 access_token 请求 用户信息,完成授权登录过程

    下一篇:

    【第三方互联】十四、Github授权第三方登录

    如您在阅读中发现不足,欢迎留言!!!

    展开全文
  • 第三方平台系列文章,今天终于又开始更新了,今天继续学习微信(wechat)授权第三方登录 一、准备工作 1、申请微信公众测试号 由于我们是个人开发者,我们需要去注册申请一个微信公众平台的测试号 ...

    第三方平台系列文章,今天终于又开始更新了,今天继续学习微信(wechat)授权第三方登录

    一、准备工作

    1、申请微信公众测试号

    由于我们是个人开发者,我们需要去注册申请一个微信公众平台的测试号

    https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    

    微信公众平台
    我们使用微信扫码登录后,我们可以拿到 appID 和 appsecret

    测试号管理

    2、关注公众测试号

    测试号二维码

    3、配置回调域名

    在“网页服务”中找到“网页账号”,修改“网页授权获取用户基本信息”接口的回调域名

    修改接口信息
    授权回调页面域名
    注意:这里说的是,配置网页授权回调页面 域名,跟我们平常对接的第三方接口不一样,不用填写完整的回调地址,只是回调域名,回调地址在回调域名之下

    • 例如
      回调地址:http://www.baidu.com/wechat/back
      那么这里:baidu.com

    新手一般在这里容易弄混,配置完成,点击“确认”即可

    二、开始开发

    1、获取应用信息

    我们将获取到的 appID 和 appsecret 写在配置文件中,我这里是 SpringBoot 项目,我就放在 application.yml 文件中

    配置信息

    2、引入 maven 依赖

    <!-- 网络请求 -->
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpclient</artifactId>
    	<version>4.5.6</version>
    </dependency>
    <!-- alibaba的fastjson -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.51</version>
    </dependency>
    

    这里我们需要用到网络请求,和 JSON 对象的转换,所以我引入了 httpclient 和 fastjson,其余依赖请自行引入

    3、从配置文件中获取 “wechat” 配置信息

    /**
     * 公众平台提供的 appid 和 appsecret
     */
    @Value("${wechat.oauth.appid}")
    public String APPID;
    @Value("${wechat.oauth.appsecret}")
    public String APPKEY;
    @Value("${wechat.oauth.callback}")
    public String URL;
    

    4、重定向到授权页面

    /**
     * 请求授权页面
     */
    @RequestMapping("/auth")
    public String token(HttpSession session) throws Exception {
        // 用于第三方应用防止CSRF攻击
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        session.setAttribute("state", uuid);
    	// Step1:获取Authorization Code
        String url = "https://open.weixin.qq.com/connect/oauth2/authorize?" +
                "appid=" + APPID +
                "&redirect_uri=" + URLEncoder.encode(URL) +
                "&response_type=code" +
                "&scope=snsapi_userinfo" +
                "&state=" + uuid +
                "#wechat_redirect";
        return PasswordUtils.redirectTo(url);
    }
    
    • Step1 参数解释如下:
    参数 是否必须 说明
    appid 公众号的唯一标识
    redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
    response_type 返回类型,请填写code
    scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
    state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    #wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数

    授权页面
    这时,我们访问,便会出现授权页面

    5、授权回调

    /**
     * 授权回调
     */
    @GetMapping(value = "/callback")
    public void callback(HttpServletRequest request) throws Exception {
        HttpSession session = request.getSession();
        // 得到Authorization Code
        String code = request.getParameter("code");
        // 我们放在地址中的状态码
        String state = request.getParameter("state");
        String uuid = (String) session.getAttribute("state");
    
        // 验证信息我们发送的状态码
        if (null != uuid) {
            // 状态码不正确,直接返回登录页面
            if (!uuid.equals(state)) {
                return PasswordUtils.redirectTo("/login");
            }
        }
    
        // Step2:通过Authorization Code获取Access Token
        String url = "https://api.weixin.qq.com/sns/oauth2/access_token?" +
                "appid=" + APPID +
                "&secret=" + APPKEY +
                "&code=" + code +
                "&grant_type=authorization_code";
        JSONObject resJson = HttpRequestUtils.httpRequestGet(url);
        if (null == resJson) {
            return PasswordUtils.redirectTo("/login");
        }
        String accessToken = resJson.getString("access_token");
        String openId = resJson.getString("openid");
        if (StringUtils.isBlank(accessToken) || StringUtils.isBlank(openId)) {
            return PasswordUtils.redirectTo("/login");
        }
    
        url = "https://api.weixin.qq.com/sns/userinfo?" +
                "access_token=" + accessToken +
                "&openid=" + openId +
                "&lang=zh_CN";
        // Step3: 获取微信用户信息
        resJson = HttpRequestUtils.httpRequestGet(url);
        /**
         * TODO 这时就该写自己的业务逻辑了
         */
    }
    
    • Step2 参数解释如下:
    参数 是否必须 说明
    appid 公众号的唯一标识
    secret 公众号的appsecret
    code 填写第一步获取的code参数
    grant_type 填写为authorization_code
    • Step3 参数解释如下:
    参数 是否必须 说明
    access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    openid 用户的唯一标识
    lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

    6、网络请求方法

    Step 2 和 Step 3 均为 GET 请求方式

    /**
     * GET 请求
     */
    public static JSONObject httpRequestGet(String url) throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        HttpResponse response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            String result = EntityUtils.toString(entity, "UTF-8");
            return JSONObject.parseObject(result);
        }
        httpGet.releaseConnection();
        return null;
    }
    

    三、文档资料

    关于微信授权登录的文档地址如下:

    https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
    

    四、总结

    该授权认证过程符合 OAuth2 认证基本流程,对于应用而言,其流程由获取Authorization Code和通过Authorization Code获取Access Token这2步组成,如图所示:

    OAuth授权认证

    如您在阅读中发现不足,欢迎留言!!!

    展开全文
  • 【第三方互联】十四、Github授权第三方登录

    千次阅读 多人点赞 2020-04-08 20:44:41
    今天我们继续学习:Github授权第三方登录,前面我们已经学习了 码云(Gitee)授权第三方登录,Github授权第三方登录的实现过程其实和 码云(Gitee)授权第三方登录的实现过程类似,只是有一些细节需要注意,下面我们...

    今天我们继续学习:Github授权第三方登录,前面我们已经学习了 码云(Gitee)授权第三方登录,Github授权第三方登录的实现过程其实和 码云(Gitee)授权第三方登录的实现过程类似,只是有一些细节需要注意,下面我们就一起来学习吧

    一、准备工作

    首先我们得有自己的一个 githu 账号,我们到 github 的官网进行注册或者登录

    官网地址:https://github.com/
    

    登录成功后:
    登录成功界面

    • 2、创建应用

    在下拉菜单中找到 “Settings”,设置
    settings
    然后找到 “Developer settings”,开发人员设置
    Developer settings
    找到“OAuth Apps”,我们就可以开始创建我们的授权应用了,在右上角点击“New OAuth APP”
    创建应用
    我们填好应用基本信息,点击“Register application”,我们便创建好了应用,点击应用,我们便可以拿到应用的 appid 和 appkey
    应用信息

    • 3、将应用信息保存到项目中

    配置信息
    由于我使用的是 SpringBoot 项目,我放在了 application.yml 文件中

    二、开始开发

    • 1、引入 Maven 依赖
    <!-- 网络请求 -->
    <dependency>
    	<groupId>org.apache.httpcomponents</groupId>
    	<artifactId>httpclient</artifactId>
    	<version>4.5.6</version>
    </dependency>
    <!-- alibaba的fastjson -->
    <dependency>
    	<groupId>com.alibaba</groupId>
    	<artifactId>fastjson</artifactId>
    	<version>1.2.51</version>
    </dependency>
    
    

    其余的依赖请自行加入

    • 2、在页面放置 “Github” 授权登录的 DOM 元素
    <a th:href="@{github/auth}" class="link" title="Github登录"><i class="iconfont icon-github"></i></a>
    
    

    这里使用的是阿里的 iconfont 图标

    三、接口类

    创建 “Github” 授权登录的 Controller,GithubController.java

    • 1、从配置文件中获取 “Github” 配置信息
    /**
     * github授权中提供的 appid 和 appkey
     */
    @Value("${github.oauth.clientid}")
    public String CLIENTID;
    @Value("${github.oauth.clientsecret}")
    public String CLIENTSECRET;
    @Value("${github.oauth.callback}")
    public String URL;
    
    • 2、页面登录按钮点击后的接口
    /**
     * 请求授权页面
     */
    @GetMapping(value = "/auth")
    public String qqAuth(HttpSession session) {
        // 用于第三方应用防止CSRF攻击
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        session.setAttribute("state", uuid);
    
        // Step1:获取Authorization Code
        String url = "https://github.com/login/oauth/authorize?scope=user" +
                "&client_id=" + CLIENTID +
                "&redirect_uri=" + URLEncoder.encode(URL) +
                "&state=" + uuid;
    
        return PasswordUtils.redirectTo(url);
    }
    

    接口文档中建议我们在授权登录时传入一个加密的数据防止被攻击,我们传入了UUID,最后重定向到授权页面
    授权页面

    • 3、当该用户点击“授权”按钮,同意授权后,就会回调到我们在应用中填写的回调地址里去
    /**
     * 授权回调
     */
    @GetMapping(value = "/callback")
    public String qqCallback(HttpServletRequest request) throws Exception {
        HttpSession session = request.getSession();
        // 得到Authorization Code
        String code = request.getParameter("code");
        // 我们放在地址中的状态码
        String state = request.getParameter("state");
        String uuid = (String) session.getAttribute("state");
    
        // 验证信息我们发送的状态码
        if (null != uuid) {
            // 状态码不正确,直接返回登录页面
            if (!uuid.equals(state)) {
                return PasswordUtils.redirectTo("/login");
            }
        }
    
        // Step2:通过Authorization Code获取Access Token
        String url = "https://github.com/login/oauth/access_token?" +
                "client_id=" + CLIENTID +
                "&client_secret=" + CLIENTSECRET +
                "&redirect_uri=" + URL +
                "&code=" + code +
                "&state=" + state;
        JSONObject accessTokenJson = GithubHttpClient.getAccessToken(url);
    
        // Step3: 获取用户信息
        /*url = "https://api.github.com/user?access_token=" + accessTokenJson.getString("access_token");*/
        url = "https://api.github.com/user";
        JSONObject jsonObject = GithubHttpClient.getUserInfo(url, accessTokenJson.getString("access_token"));
        
        /**
         * TODO 获取到用户信息之后,你自己的业务逻辑
         * 判断数据库是否有次用户,有---登录成功,无---保存用户至数据库,登录成功
         */
    
        return PasswordUtils.redirectTo("/success");
    }
    

    四、网络请求方法

    上面回调方法中所用到的网络接口方法,我放在了 GithubHttpClient.java 文件中,主要有两个方法

    • 1、使用 code 获取Access Token
    /**
     * 获取Access Token
     * post
     */
    public static JSONObject getAccessToken(String url) throws IOException {
        HttpClient client = HttpClients.createDefault();
        HttpPost httpPost = new HttpPost(url);
        httpPost.setHeader("Accept", "application/json");
        HttpResponse response = client.execute(httpPost);
        HttpEntity entity = response.getEntity();
        if (null != entity) {
            String result = EntityUtils.toString(entity, "UTF-8");
            return JSONObject.parseObject(result);
        }
        httpPost.releaseConnection();
        return null;
    }
    

    我们在请求头中传入了

    httpPost.setHeader("Accept", "application/json");
    

    是希望返回 JSON 格式的数据,code 直接拼接在了 url 上

    • 2、使用 Access Token 获取用户信息
    /**
     * 获取用户信息
     * get
     */
    public static JSONObject getUserInfo(String url, String token) throws IOException {
        CloseableHttpClient client = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        httpGet.setHeader("Accept", "application/json");
        httpGet.setHeader("Authorization", "token " + token);
        HttpResponse response = client.execute(httpGet);
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            String result = EntityUtils.toString(entity, "UTF-8");
            return JSONObject.parseObject(result);
        }
        httpGet.releaseConnection();
        return null;
    }
    

    获取用户信息这一步,官方给的文档是:
    获取用户信息
    注意:这里我们在请求头中传入 token,API 文档中描述不够清楚,这里看了好几遍才明白,掉坑儿里了

    httpGet.setHeader("Authorization", "token " + token);
    

    最终我们获取到一个 JSON 对象,该对象包含了用户的信息,例如:id,name,email,phone 等等。

    • 3、官网 OAuth API 文档
    https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/#web-application-flow
    

    五、总结

    该授权认证过程符合 OAuth2 认证基本流程,流程如下:
    OAuth2授权认证流程

    1、用户点击页面登录按钮,请求授权页面,用户在此页面登录账号并同意授权
    2、用户同意授权后,回调至我们项目中,首先验证 state 是否一致
    3、使用上一步拿到的 code 请求 access_token
    4、使用 access_token 请求 用户信息,完成授权登录过程

    如您在阅读中发现不足,欢迎留言!!!

    下一篇:

    【第三方互联】十五、百度(baidu)授权第三方登录

    如您在阅读中发现不足,欢迎留言!!!

    展开全文
  • 【第三方互联】三、腾讯QQ授权第三方登录

    万次阅读 多人点赞 2020-02-25 15:24:15
    定义三个变量,接收 QQ 互联的信息 2、登录按钮点击后的接口 /** * 请求授权页面 */ @GetMapping(value = "/auth") public String qqAuth(HttpSession session) { // 用于第三方应用防止CSRF攻击 String uuid = ...
  • 在我们常用的App中经常会看到分享与第三方登录的功能,可以说分享与第三方登录已经成为了各大APP的必备功能。对于产品运行与推广来说,分享与第三方登录不仅能加强用户粘性,增加流量及新用户,也能提升用户存、留...
  • 在我们常用的App中经常会看到分享与第三方登录的功能,可以说分享与第三方登录已经成为了各大APP的必备功能。对于产品运行与推广来说,分享与第三方登录不仅能加强用户粘性,增加流量及新用户,也能提升用户存、留...
  • 我们创建了支付宝开放平台的网页&移动应用,审核通过后,我们需要拿到appid,支付宝公钥,私钥进行开发 一、应用信息 添加应用信息至项目环境中 我们保存... 下一篇: 【第三方互联】十三、码云(Gitee)授权第三方登录
  • php实现第三方登录,百度登录例子 配置说明 1.1 php 版本5.3 1.2 IDE phpstorm9.0.2 实现过程 2.1前期准备 建议先阅读 oAuth2.0的相关资料 http://developer.baidu.com/wiki/index.php?title=docs/oauth,...
  • qq第三方登录

    千次阅读 2017-07-21 15:58:33
    同事搞了个qq第三方登录,学习下.  qq第三方登录(qq oAuth2.0),在oauth的协议的基础上实现的(新浪,wx等一些第三方登录都遵循这个原则),第三方分网站与移动应用  网站接入:总体流程 QQ登录OAuth2.0总体处理流程如下...
  • 支付宝第三方登录

    千次阅读 2019-01-15 15:42:52
    最近做了第三方登录,看了官方文档,加上各种百度,依然踩过不少坑,今天和大家分享一下。 我是做的pc端的,贴张图。 首先: 有支付宝的实名账号,没有实名实名一下。 然后选择合作伙伴角色,好像有三个。...
  • Github第三方登录

    千次阅读 2016-01-15 11:08:36
    第三方登录的定义 所谓的第三方登录,就是利用用户在第三方平台上已有的账号来快速完成自己应用的登录或者注册的功能。而这里的第三方平台,一般是已经有大量用户的平台,如国内的新浪微博、QQ空间,外国的...
  • 微信第三方登录

    千次阅读 2019-03-01 11:33:03
    因网站需求,需要在网站中加入微信第三方登录,因本人是菜鸟,所以用了半天的时间才搞定,以防以后需求用到,记录一下,以后就可以直接拿来用了 第一步: 首先在微信开放平台,申请账号并且认证,认证费用300RMB,认证期过后...
  • 第三方登录之支付宝登录

    千次阅读 2017-08-26 18:01:41
    公司一个需求让做一个支付宝的第三方登录,注意,是登录不是支付。也很简单,这里我自己记录下大家没有说的问题。首先,支付宝登录和其他第三方登录不太一样,相比麻烦一点。一般第三方登录我们用shareSDK就好,但是...
  • 第三方登录不得不说的一个优势:那就是本地注册和第三方注册的选择。虽然这是一个不能称之为问题的问题,其中的心理学不得不说:做为一个app的新用户,你有两个选择:1....2.第三方登录后,随机分配一个id
  • 第三方登录---微信登录

    万次阅读 2018-02-06 16:20:36
    由于某一个误导,误打误撞的实现了微信登录...(其实是要实现第三方平台授权的...在此只写一个简单的小demo,是想告诉大家这个第三方登录其实很简单,没有想象的那么难。大家还是要多看官方文档。 首先也是最重要的:微
  • 友盟 第三方登录

    千次阅读 2017-04-26 13:21:30
    友盟 第三方登录 关于基本配置问题 请移步点击打开链接。 第三方登录 首先要申请友盟的Appkey,然后在的QQ 微信、新浪 三方平台获取自己的 Appkey 和App Secret 1.集成友盟SDK 解压后如图 2.使用 友盟集成...
  • 第三方登录(百度账号登录)

    千次阅读 2017-07-28 15:54:57
    实现百度第三方登录(Android Studio) 对于第一次开发第三方登录的开发者而言,学习百度账号的第三方登录相对来说没有实现qq,微信那么繁琐,更适合初学者学习。 说明:实现百度第三方登录与实现qq的流程是一样的,...
  • 四种第三方登录

    千次阅读 2017-02-11 01:12:48
    对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享; 各大开放平台注册账户获取AppKey和AppSecret ...
  • Android QQ第三方登录详解

    万次阅读 2017-06-03 13:44:48
    Android QQ第三方登录详解
  • 百度第三方登录

    千次阅读 2017-03-11 10:43:32
    接下来就是百度第三方登录具体步骤: 进入百度开发者中心 如果有账号就可以直接登录,如果没有就注册一个,手机号就可以注册. 登录成功,右上方就可以出现一个,申请记录 点击进去 然后再点击进入百度云官网...
  • gitee第三方登录

    千次阅读 2019-10-22 18:14:36
    在设置里面找到第三方应用,然后添加; 其他同github第三方登录
  • 第三方登录解决方案:Socialite

    千次阅读 2019-11-28 12:14:07
    通过授权第三方登录 2.学习/操作 所有第三方 OAuth 提供者:Socialite Providers 暂见: https://xueyuanjun.com/post/9043.html //第三方登录解决方案:Laravel Socialite ...
  • 第三方登录原理及实现

    万次阅读 2018-01-08 11:17:29
    第三方登录,回调页面跳转 Ajk研究院系统,通过中国经纪人后台登录,记录Session,实现页面跳转。 第三方登录原理 具体代码实现 第三方登录原理 (1)客户端向后台发送请求,带着回调页面的路径。 ...
  • 第三方登录测试点

    千次阅读 2019-01-10 09:50:30
    场景一:用户从未注册,使用微信第三方登录。 用户使用微信扫描后,跳转到绑定账户页面,提示输入手机号,并完善个人资料信息后,登录成功。 测试点:1,绑定账户页面的文案、手机格式验证。 2,手机号码验证码是否...
  • Java 实现QQ第三方登录

    千次阅读 2018-12-17 17:56:05
    前言:很多时候我们都需要如下的第三方登录,用QQ帐号快速登录你的网站,降低注册门槛,为你的网站带来海量新用户。   下面让我们来实现吧,可以参考官网文档,也可以看我下面的操作说明 QQ第三方登录接入指南...
  • 通过微信,微博等第三方登录大部分工作都是客户端在做,服务器端一般需要哪些工作,怎么实现, 怎么样更安全
  • php实现第三方登录

    千次阅读 2017-04-18 18:20:01
    网站为了方便用户快速的登录系统,都会提供使用知名的第三方平台账号进行快速登录的功能,第三方登录都是基于oAuth2.0标准来实现的。下面详细分析【基于账号密码授权】和【基于oAuth2.0标准授权】的原理和oAuth2.0...
  • java 第三方登录之QQ登录

    万次阅读 2016-04-21 11:21:19
    刚刚做了一个第三方登录的网站,之前没有做过,在网上找前辈们的杰作,但都没有找到,只好自己摸索,做出来QQ第三方登录。 1、要做QQ第三方登录,首先得在QQ互联(http://wiki.connect.qq.com/)上有账号,也...
  • Java实现Google第三方登录

    万次阅读 热门讨论 2017-03-28 11:15:52
    其实所有的第三方登录都是基于OAuth协议的,大多数平台都支持OAuth2.0,只有Twitter的是基于OAuth1.0来做的。所以只要弄明白一个,其他的什么qq、微信、微博的第三方登录也都一样。上一篇写的Facebook,现在再写一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 220,964
精华内容 88,385
关键字:

第三方登录