1. 注册码云账户

过程略,可通过微博、微信、QQ、钉钉等注册码云账户。

2. 创建码云第三方应用

登录码云管理台,依次进入:“设置”/“第三方应用”/“创建应用”,填写“应用名称”、“应用描述”、“应用主页”、“应用回调地址”等关键信息,创建“码云应用”。
创建第三方应用 - Gitee.com.png

3. 获取码云应用令牌

完成码云应用添加后,即返回应用列表,双击对于的码云应用后,即可获取应用的令牌信息(主要关注:Client ID、Client Secret)。
应用详情 - BDAP-LOCAL - Gitee.com.png

4. 权限分配

设置界面同上一步骤,根据实际情况配置相关权限。

5. 接入登录

设置界面同上一步骤,填写“应用主页”及“应用回调地址”,用于扫描登录后跳转回应用程序。

6. 应用系统集成

  1. 下载**JustAuth-demo**工程,gitee或github均可。

    1. git clone https://gitee.com/justauth/JustAuth-demo.git
  2. 修改配置参数。

  • application.properties

根据实际情况修改端口、Redis等配置信息。

  1. server.port=8443
  2. spring.thymeleaf.cache=false
  3. spring.devtools.restart.additional-paths=src/main/java
  4. spring.devtools.restart.exclude=static/**,public/**
  5. # Redis配置
  6. spring.redis.database=0
  7. spring.redis.host=localhost
  8. spring.redis.port=6379
  9. spring.redis.password=
  • me.zhyd.justauth.RestAuthController

将获取的码云应用令牌信息(Client ID -> clientId、Client Secret -> clientSecret)更新至控制器,同时需要确保在开发者后台配置的回调地址与“redirectUri”保持一致。

  1. /**
  2. * 根据具体的授权来源,获取授权请求工具类
  3. */
  4. private AuthRequest getAuthRequest(String source) {
  5. AuthRequest authRequest = null;
  6. switch (source.toLowerCase()) {
  7. case "gitee":
  8. authRequest = new AuthDingTalkRequest(AuthConfig.builder()
  9. .clientId("${Client ID}")
  10. .clientSecret("${Client Secret}")
  11. .redirectUri("http://localhost:8443/oauth/callback/gitee")
  12. .build());
  13. break;
  14. // ....
  15. default:
  16. break;
  17. }
  18. if (null == authRequest) {
  19. throw new AuthException("未获取到有效的Auth配置");
  20. }
  21. return authRequest;
  22. }

扫描登录处理逻辑,需根据实际需要进行修改,此处示例登录成功后跳转至第三方站点。

  1. @RequestMapping("/callback/{source}")
  2. public ModelAndView login(@PathVariable("source") String source, AuthCallback callback, HttpServletRequest request) {
  3. AuthRequest authRequest = getAuthRequest(source);
  4. AuthResponse<AuthUser> response = authRequest.login(callback);
  5. log.info(JSONObject.toJSONString(response));
  6. if (response.ok()) {
  7. userService.save(response.getData());
  8. // 示例:登录成功后跳转至第三方站点
  9. return new ModelAndView("redirect:http://localhost:8089/bcm-szx-sati/index.html#/home");
  10. }
  11. Map<String, Object> map = new HashMap<>(1);
  12. map.put("errorMsg", response.getMsg());
  13. return new ModelAndView("error", map);
  14. }
  1. 启动工程,选择“Gitee”,手机扫描二维码,进行验证。

JustAuth第三方登录软件.png

  1. 响应消息。

根据响应消息,可获取**token**(包含:**accessToken**),之后通过这些信息可获取扫描用户更多授权信息。

  1. {
  2. "code": 2000,
  3. "data": {
  4. "avatar": "https://portrait.gitee.com//1780/****************.png",
  5. "gender": "UNKNOWN",
  6. "nickname": "****************",
  7. "rawUserInfo": {
  8. "gists_url": "https://gitee.com/api/v5/users/****************/gists{/gist_id}",
  9. "repos_url": "https://gitee.com/api/v5/users/****************/repos",
  10. "following_url": "https://gitee.com/following_url{/other_user}",
  11. "created_at": "2019-09-27T17:32:42+08:00",
  12. "remark": "",
  13. "login": "****************",
  14. "type": "User",
  15. "subscriptions_url": "https:///users/****************/subscriptions",
  16. "updated_at": "2021-11-19T13:59:02+08:00",
  17. "id": 5341492,
  18. "public_repos": 12,
  19. "organizations_url": "https://gitee.com/api/v5/users/****************/orgs",
  20. "starred_url": "https://****************/starred{/owner}{/repo}",
  21. "followers_url": "https://gitee.com/api/v5/users/****************/followers",
  22. "public_gists": 0,
  23. "url": "https://gitee.com/api/v5/users/****************",
  24. "received_events_url": "https://****************/received_events",
  25. "watched": 48,
  26. "followers": 1,
  27. "avatar_url": "https:///****************.png",
  28. "events_url": "https://gitee.com//****************/events{/privacy}",
  29. "html_url": "https://gitee.com/****************",
  30. "following": 3,
  31. "name": "****************",
  32. "stared": 0
  33. },
  34. "source": "GITEE",
  35. "token": {
  36. "accessToken": "****************",
  37. "expireIn": 86400,
  38. "refreshToken": "****************",
  39. "refreshTokenExpireIn": 0,
  40. "scope": "user_info projects **************** groups gists enterprises emails",
  41. "tokenType": "bearer"
  42. },
  43. "username": "****************",
  44. "uuid": "****************"
  45. }
  46. }

参考

JustAuth:集成第三方企业平台指南-码云登录
https://justauth.wiki/guide/oauth/gitee