精华内容
下载资源
问答
  • gitee第三方登录

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

    在设置里面找到第三方应用,然后添加;
    在这里插入图片描述
    其他同github第三方登录

    展开全文
  • 今天我们来学习:码云(Gitee)授权第三方登录,相比之前 支付宝登录、腾讯QQ登录 以及 新浪微博登录 来说,相对于比较简单 一、准备工作 1、登录 码云官网 官网地址:https://gitee.com/ 注册、登录我们的账号 2、...
  • 在SpringBoot中整合Gitee第三方登录授权功能,包括获取Gitee用户信息

    在SpringBoot工程中整合Gitee第三方登录授权功能

    编辑时间:2021/04/04

    读完本节:大概花费10钟,共1046词

    1.创建gitee第三方应用程序

    2.在idea中创建SpringBoot工程,建项目时勾选web框架即可

    3.使用的dependece:okhttp、fastjson、httpclient

    在pom.xml中添加上述依赖

    <dependency>
    	<groupId>com.squareup.okhttp3</groupId>
        <artifactId>okhttp</artifactId>
        <version>3.14.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.75</version>
    </dependency>
    
    <!--网络请求-->
    <dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5.6</version>
    </dependency>
    

    4.在idea中建立相应的工程结构

    image-20210404153013053

    1. 将创建好的第三方应用属性放入src\main\resources\application.properties文件内

      image-20210406135833229

    2. 在前端页面中填入get请求,将用户引导至gitee第三方认证页面上

      https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code&state=1
      

      将{}括号内的参数换成申请的第三方程序的相应属性

      image-20210406135944854

    3. 创建AccessTokenDTO.java用于存储在gitee中创建的第三方应用,通过这个类来对第三方应用中的client_id、client_secret、redirect_uri进行封装

      package com.coderforum.community.dto;
      
      import org.springframework.stereotype.Component;
      
      /**
       * @Author: xuehai.XUE
       * @MailBox: xuehai.xue@qq.com
       * @Date: 2021/4/1 20:56
       * @Description: 用于数据传输的对象AccessTokenDTO
       */
      @Component
      public class AccessTokenDTO {
          private String client_id;
          private String redirect_uri;
          private String client_secret;
          private String code;
          private String state;
      
          public String getClient_id() {
              return client_id;
          }
      
          public void setClient_id(String client_id) {
              this.client_id = client_id;
          }
      
          public String getRedirect_uri() {
              return redirect_uri;
          }
      
          public void setRedirect_uri(String redirect_uri) {
              this.redirect_uri = redirect_uri;
          }
      
          public String getClient_secret() {
              return client_secret;
          }
      
          public void setClient_secret(String client_secret) {
              this.client_secret = client_secret;
          }
      
          public String getCode() {
              return code;
          }
      
          public void setCode(String code) {
              this.code = code;
          }
      
          public String getState() {
              return state;
          }
      
          public void setState(String state) {
              this.state = state;
          }
      }
      
    4. 创建GiteeProvider.java使用方法getAccessToken用于向gitee认证服务器发送请求,发送code获取Accesstoken;使用方法getUser用于向Gitee服务器请求用户数据

      package com.coderforum.community.provider;
      
      import com.alibaba.fastjson.JSON;
      import com.coderforum.community.dto.AccessTokenDTO;
      import com.coderforum.community.dto.GiteeUser;
      import okhttp3.*;
      import org.springframework.stereotype.Component;
      
      import java.io.IOException;
      
      /**
       * @Author: xuehai.XUE
       * @MailBox: xuehai.xue@qq.com
       * @Date: 2021/4/1 20:54
       * @Description:
       */
      @Component
      public class GiteeProvider {
          /** 通过okhttp向gitee认证服务器发送code以获取返回的AccessToken
           *
           * @param accessTokenDTO 传入的待获取认证DTO,包含应用id、密钥、重定向地址等
           * @return AccessToken
           */
          public String getAccessToken(AccessTokenDTO accessTokenDTO){
              MediaType mediaType = MediaType.get("application/json; charset=utf-8");
              OkHttpClient client = new OkHttpClient();
      
      
                  RequestBody body = RequestBody.create(mediaType, JSON.toJSONString(accessTokenDTO));
                  Request request = new Request.Builder()
                          .url("https://gitee.com/oauth/token?grant_type=authorization_code&" +
                                  "code=" + accessTokenDTO.getCode() + "&" +
                                  "client_id=" + accessTokenDTO.getClient_id() + "&" +
                                  "redirect_uri=" + accessTokenDTO.getRedirect_uri() + "&" +
                                  "client_secret=" + accessTokenDTO.getClient_secret())
                          .post(body)
                          .build();
                  try (Response response = client.newCall(request).execute()) {
                      String string = response.body().string();
                      String accessToken = string.split("\"")[3];
                      return accessToken;
                  } catch (IOException e) {
                      e.printStackTrace();
                  }
      
              return null;
          }
      
          /** 应用通过 access_token 访问 Open API 使用用户数据。
           *
           * @param accessToken 传入的accessToken用于向Gitee服务器请求用户数据
           * @return
           */
          public GiteeUser getUser(String accessToken){
              OkHttpClient client = new OkHttpClient();
              Request request = new Request.Builder()
                      .url("https://gitee.com/api/v5/user?access_token=" + accessToken)
                      .build();
              try {
                  Response response = client.newCall(request).execute();
                  String string = response.body().string();
                  //将String的json对象自动的解析成GiteeUser类的对象
                  GiteeUser giteeUser = JSON.parseObject(string, GiteeUser.class);
                  return giteeUser;
              } catch (IOException e) {
                  e.printStackTrace();
              }
              return  null;
          }
      }
      
    5. 创建AuthorizedController.java用于页面控制和跳转

      package com.coderforum.community.controller;
      
      import com.coderforum.community.dto.AccessTokenDTO;
      import com.coderforum.community.dto.GiteeUser;
      import com.coderforum.community.provider.GiteeProvider;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Value;
      import org.springframework.stereotype.Controller;
      import org.springframework.web.bind.annotation.GetMapping;
      import org.springframework.web.bind.annotation.RequestParam;
      
      
      /**
       * @Author: xuehai.XUE
       * @MailBox: xuehai.xue@qq.com
       * @Date: 2021/4/1 20:45
       * @Description:
       */
      @Controller
      public class AuthorizedController {
          @Autowired
          private AccessTokenDTO accessTokenDTO;
      
          @Autowired
          private GiteeProvider giteeProvider;
      
          /**
           * 获取application.properties中定义的第三方应用的属性
           */
          @Value("${gitee.client.id}")
          private String clientId;
          @Value("${gitee.client.secret}")
          private String clientSecret;
          @Value("${gitee.redirect.uri}")
          private String clientRedirectUri;
      
      
          @GetMapping("/callback")
          public String callback(@RequestParam(name = "code") String code,
                                 @RequestParam(name = "code") String state) {
              //为accessTokenDTO对象赋值
              accessTokenDTO.setClient_id(clientId);
              accessTokenDTO.setClient_secret(clientSecret);
              accessTokenDTO.setCode(code);
              accessTokenDTO.setRedirect_uri(clientRedirectUri);
              accessTokenDTO.setState(state);
      
              //将accessTokenDTO对象作为参数传入以获取用户的accessToken
              String accessToken = giteeProvider.getAccessToken(accessTokenDTO);
      
              //使用GetUser方法将携带的accessToken链接发送至Gitee服务器获取用户的信息
              GiteeUser user = giteeProvider.getUser(accessToken);
              System.out.println(user.getName());
              System.out.println(user.getId());
              System.out.println(user.getBio());
      
              //重定向返回首页
              return "redirect:/";
      
      
          }
      }
      
    6. 获取的JSON对象转为指定的实体类对象,这个类定义如下

      package com.coderforum.community.dto;
      
      /**
       * @Author: xuehai.XUE
       * @MailBox: xuehai.xue@qq.com
       * @Date: 2021/4/2 13:33
       * @Description: 用于传回JSON格式的用户,解析为这个目标类
       */
      public class GiteeUser {
          private String name;
          private Long id;
          private String bio;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              this.name = name;
          }
      
          public Long getId() {
              return id;
          }
      
          public void setId(Long id) {
              this.id = id;
          }
      
          public String getBio() {
              return bio;
          }
      
          public void setBio(String bio) {
              this.bio = bio;
          }
      }
      

    5.相关链接

    1. Gitee Oauth文档
    2. 在Gitee中创建第三方应用
    3. okhttp官网
    4. 在MVNREPOSITORY中的fastjson
    5. 在Gitee中测试得到的token是否能够获取用户信息

    image-20210303180846928

    STAY ANGER!!!
    展开全文
  • github 和gitee 第三方登录 实现过程

    千次阅读 2019-12-04 13:24:07
    现在很多站点都支持第三方登录功能, 如何实现第三方登录,做以下记录: 首先有一个GitHub账号 登录Github 点击 setting 点击开发者设置 新建一个授权应用 填写信息 获取Client ID和Client Secret 后端程序...

    首先

    现在很多站点都支持第三方登录功能, 如何实现第三方登录,做以下记录:
    首先有一个GitHub账号

    登录Github

    • 点击 setting

    在这里插入图片描述

    • 点击开发者设置
      在这里插入图片描述
    • 新建一个授权应用
      在这里插入图片描述
    • 填写信息

    在这里插入图片描述

    获取Client ID和Client Secret

    在这里插入图片描述

    后端程序

    1. 先写一个简单的登录页面
    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>登录</title>
    </head>
    <body>
    <form method="get" action="/oauth/login">
        <input type="submit" th:name="type" th:value="github">
        <input type="submit" th:name="type" th:value="gitee"/>
    </form>
    </body>
    </html>
    
    1. controller 页面跳转
        @GetMapping(value = "/login")
        public String login() {
            return "login";
        }
    

    在这里插入图片描述

    A点击登录

    会重定向到github的登录授权页面;地址如下:

    https://github.com/login/oauth/authorize?client_id=xxxxxxxxxxxxxxxxxx&scope=user,public_repo

    授权结束

    地址跳转到回掉地址,并携带一个code 参数

    http://localhost:8080/login?code=xxxxxxxxxxxxxxxxxxxx

    B 获取用户的access_token用户标识

    需要传入client_id,client_secret 以及 上一步回调得到的code参数

    https://github.com/login/oauth/access_token?client_id=xxxxxxxxxxxxxxxxxxx&client_secret=xxxxxxxxxxxxxxxxx&code=xxxxxxxxxxxxxxxxxxx

    C 最后一步使用access_token 获取用户信息

    https://api.github.com/user?access_token=xxxxxxxxxxxxxxxxx

    完整代码

    在这里插入图片描述

    基本的Oauth

    public interface BaseOauth {
    
        /**
         * 授权地址
         *
         * @return 授权地址
         */
        public String authorize();
    
        /**
         * 获取accessToken
         *
         * @param code 请求编码
         * @return accessToken
         */
        public String accessToken(String code);
    
        /**
         * 获取用户信息
         *
         * @param accessToken token
         * @return user
         */
        public String userInfo(String accessToken);
    }
    
    

    GiteeOauth实现

    @Component
    public class GiteeOauth implements BaseOauth {
    
        private static final String GITEE_CLIENT_ID = "1cf84a0dc5cbe7719afe1c16b71dc2475f2612c05bee7557922022d0b5c8";
        private static final String GITEE_CLIENT_SECRET = "13bac3e8d348264b3c9d3a1738b4879b34eb2e850489e69f411d34d474";
    
        private static final String REDIRECT_URI = "http://127.0.0.1:8012/gitee/callback";
    
        @Override
        public String authorize() {
            return "https://gitee.com/oauth/authorize?client_id=" + GITEE_CLIENT_ID + "&response_type=code&redirect_uri=" + REDIRECT_URI;
        }
    
        @Override
        public String accessToken(String code) {
            return "https://gitee.com/oauth/token?grant_type=authorization_code&code=" + code + "&client_id=" + GITEE_CLIENT_ID + "&redirect_uri=" + REDIRECT_URI + "&client_secret=" + GITEE_CLIENT_SECRET;
        }
    
        @Override
        public String userInfo(String accessToken) {
            return "https://gitee.com/api/v5/user?access_token=" + accessToken;
        }
    }
    
    

    GithubOauth实现

    @Component
    public class GithubOauth implements BaseOauth {
    
        private static final String GITHUB_CLIENT_ID = "3d00a49f8121305975c";
        private static final String GITHUB_CLIENT_SECRET = "4edd0d1css04100dd57c34cde45c1e21e0521b64b89";
    
        /**
         * 登陆授权类型
         */
        @Override
        public String authorize() {
            return "https://github.com/login/oauth/authorize?client_id=" + GITHUB_CLIENT_ID + "&scope=user,public_repo";
        }
    
        @Override
        public String accessToken(String code) {
            return "https://github.com/login/oauth/access_token?client_id=" + GITHUB_CLIENT_ID + "&client_secret=" + GITHUB_CLIENT_SECRET + "&code=" + code;
        }
    
        @Override
        public String userInfo(String accessToken) {
            return "https://api.github.com/user?access_token=" + accessToken + "&scope=public_repo%2Cuser&token_type=bearer";
        }
    }
    

    BaseOauthService

    public interface BaseOauthService {
        String authorizeUri();
    
        String getAccessToken(String code);
    
        JSONObject getUserInfo(String accessToken);
    
    }
    

    GiteeOauthService

    @Service
    public class GiteeServiceImpl implements BaseOauthService {
    
        @Autowired
        GiteeOauth giteeOauth;
    
        @Autowired
        RestTemplate restTemplate;
    
        @Override
        public String authorizeUri() {
            return giteeOauth.authorize();
        }
    
        @Override
        public String getAccessToken(String code) {
            String token = giteeOauth.accessToken(code);
            ResponseEntity<Object> entity = restTemplate.postForEntity(token, httpEntity(), Object.class);
            Object body = entity.getBody();
            assert body != null;
            String string = body.toString();
            String[] split = string.split("=");
            String accessToken = split[1].toString().split(",")[0];
            return accessToken;
        }
    
        @Override
        public JSONObject getUserInfo(String accessToken) {
            String userInfo = giteeOauth.userInfo(accessToken);
            ResponseEntity<JSONObject> forEntity = restTemplate.exchange(userInfo, HttpMethod.GET, httpEntity(), JSONObject.class);
            JSONObject body = forEntity.getBody();
            return body;
        }
    
        public static HttpEntity httpEntity() {
            HttpHeaders headers = new HttpHeaders();
            headers.add("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");
      
            HttpEntity<HttpHeaders> request = new HttpEntity<>(headers);
            return request;
        }
    }
    
    

    GithubOauthService

    @Service
    public class GithubServiceImpl implements BaseOauthService {
        @Autowired
        GithubOauth githubOauth;
        @Autowired
        private RestTemplate restTemplate;
    
        @Override
        public String authorizeUri() {
            return githubOauth.authorize();
        }
    
        @Override
        public String getAccessToken(String code) {
            String token = githubOauth.accessToken(code);
            ResponseEntity<Object> forEntity = restTemplate.exchange(token, HttpMethod.GET, httpEntity(), Object.class);
            String[] split = Objects.requireNonNull(forEntity.getBody()).toString().split("=");
            String accessToken = split[1].split(",")[0];
            return accessToken;
        }
    
        @Override
        public JSONObject getUserInfo(String accessToken) {
            String userInfo = githubOauth.userInfo(accessToken);
            ResponseEntity<JSONObject> entity = restTemplate.exchange(userInfo, HttpMethod.GET, httpEntity(), JSONObject.class);
            JSONObject body = entity.getBody();
            return body;
        }
    }
    

    Controller

    @Controller
    public class IndexController {
    
        @Autowired
        private GiteeServiceImpl giteeService;
    
        @Autowired
        GithubServiceImpl githubService;
    
    
        @GetMapping(value = "/")
        public String index() {
            return "index";
        }
    
        @GetMapping(value = "/login")
        public String login() {
            return "login";
        }
    
    
        @GetMapping(value = "/oauth/login")
        public String login(@RequestParam("type") String type) {
            if (type.toUpperCase().equals(LoginType.GITHUB.toString())) {
                return "redirect:" + githubService.authorizeUri();
            }
            return "redirect:" + giteeService.authorizeUri();
        }
    
        @GetMapping(value = "/github/callback")
        public String callback(HttpServletRequest request, Model model) {
            String code = request.getParameter("code");
            JSONObject userInfo = githubService.getUserInfo(githubService.getAccessToken(code));
            UserInfo info = JSON.parseObject(userInfo.toString(), UserInfo.class);
            model.addAttribute("github", info);
            return "index";
        }
    
        @GetMapping(value = "/gitee/callback")
        public String giteeCallBack(HttpServletRequest request, Model model) {
            String code = request.getParameter("code");
            JSONObject userInfo = giteeService.getUserInfo(giteeService.getAccessToken(code));
            UserInfo info = JSON.parseObject(userInfo.toString(), UserInfo.class);
            model.addAttribute("gitee", info);
            return "index";
        }
    }
    

    UserInfo

    @Data
    public class UserInfo {
        private Integer id;
        private String avatarUrl;
        private String login;
        private String bio;
        private String createdAt;
        private String htmlUrl;
    }
    
    
    public enum LoginType {
        /**
         * 登录类型
         */
        GITEE,
        GITHUB;
    }
    
    

    显示用户信息

    <!DOCTYPE html>
    <html lang="en" xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta charset="UTF-8">
        <title>首页</title>
        <style>
            .container {
                width: 500px;
                margin: 0 auto;
            }
        </style>
    </head>
    <body>
    <div class="container">
        <h1> Gitee</h1>
        <p th:text="${gitee}"></p>
    
        <h1> GitHub</h1>
        <p th:text="${github}"></p>
    </div>
    </html>
    

    在这里插入图片描述
    在这里插入图片描述
    参考文档:

    https://developer.github.com/apps/building-oauth-apps/authorizing-oauth-apps/

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

    展开全文
  • Gitee第三方应用登录

    2021-10-17 10:15:22
    Gitee第三方应用登录 更多信息请查阅Gitee OAuth 文档 一、Gitee第三方应用登录大致流程 二、Gitee第三方应用登录具体细节 一、如何获取Gitee三方认证页面的链接? 登录Gitee,点击“设置” 点击第三方应用 ...

    Gitee第三方应用登录

    更多信息请查阅Gitee OAuth 文档

    一、Gitee第三方应用登录大致流程

    在这里插入图片描述

    二、Gitee第三方应用登录具体细节

    一、如何获取Gitee三方认证页面的链接?

    • 登录Gitee,点击“设置”
      在这里插入图片描述

    • 点击第三方应用

    在这里插入图片描述

    • 点击创建应用

    在这里插入图片描述

    • 应用创建完毕后,进入应用详情界面,点击右下角“模拟请求”,页面会跳转到Gitee三方认证页面
      在这里插入图片描述

    二、access_token API

    https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}
    
    {
      url: https://gitee.com/oauth/token
      data: {
    	grant_type: "authorization_code",
        code: "xxx", // 用户授权码
        client_id: "xxx", // 第三方应用id,在应用详情页面获得
        redirect_uri: "xxx", // 回调地址
        client_secret: "xxx", // 第三方应用secret,在应用详情页面获得
      },
    }
    

    三、我的思路

    • 在登录页面有一个Gitee图标,用户点击这个图标后就会跳转到Gitee三方认证页面
    • 我的回调地址是http://localhost:8000,用户授权后,页面会跳转到http://localhost:8000?code=xxx
    • 我在/路径下通过location获取到search,进一步处理得到code
    • 我在应用服务器这边写了一个接口,获取code返回access_token。(做这个代理是为了防止client_idclient_secret被别人看到)
    • 前端这边发送请求获取到access_token后,就可以通过其它API获取用户信息了
    展开全文
  • 首先我们需要在github或者gitee上申请一个应用 根据以上的图片在gitee中申请我们的一个应用 注意: 申请完成后我们就可以开始写代码了 这里是我的代码 , 大家跟着改一改就可以了 先来看一下我的项目结构 , 这...
  • 码云(Gitee)第三方登录比较简单,先用它练练手,再去尝试小程序、github等步骤繁琐的第三方登录 一、工具准备 使用postman进行接口测试 IDEA 编译器 二、项目搭建 只需要 web 依赖 <dependency> <...
  • 今天将博客的第三方登录写了一下 博客是前后端分离的 前端vue+后端laravel 我在这里会一步步教大家如何理解 aouth 形式的授权登录 aouth登录大概的流程图 如何申请应用如下 github应用创建地址 gitee应用创建...
  • 前文:Spring Security OAuth2——自定义OAuth2第三方登录Gitee) Maven 主要 <!--Spring Security--> <dependency> <groupId>org.springframework.boot</groupId> <...
  • Java、springboot实现Gitee登录Gitee实现第三方登录1.1准备工作--申请Gitee授权1.2 Gitee登录流程及原理1.3 Springboot整合Gitee登录1、创建springboot项目2、导入依赖pom.xml、编写配置文件application.properties3...
  • php对接码云gitee登录 api

    多人点赞 热门讨论 2020-04-08 22:34:18
    目录申请开发应用API文档对接gitee登录 OAuth流程(注意是post请求还是get请求)php对接(这里使用的是...码云第三方应用地址 https://gitee.com/oauth/applications API文档 https://gitee.com/api/v5/swagger...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,732
精华内容 3,492
关键字:

gitee第三方登录