1. 注册百度开发者账号

1.注册:百度Passport
2.登录百度开发者中心:百度开发者中心

2. 创建第三方授权应用

进入百度开发者控制台应用管理页面“创建工程”,开始创建应用。
1.png
2.png

3. 获取百度应用令牌

记录以下三个信息:API Key、Secret Key和应用回调地址,后面我们会用到。
3.png

4. 应用系统集成

  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 -> API Key、Client Secret -> Secret Key)更新至控制器,同时需要确保在开发者后台配置的回调地址与“redirectUri”保持一致。

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

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

  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. 启动工程,选择“百度”,手机扫描二维码,进行验证。

4.png

  1. 响应消息。

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

  1. {
  2. "code":2000,
  3. "data":{
  4. "avatar":"http://himg.bdimg.com/sys/portrait/item/1ea2e5878cxxxe4b8bf4882.jpg",
  5. "gender":"MALE",
  6. "nickname":"凌***丿",
  7. "rawUserInfo":{
  8. "birthday":"2009-04-05",
  9. "openid":"oD0ag_m52Xxxxxx6wWP2Dbm1X",
  10. "sex":"1",
  11. "is_realname":"1",
  12. "portrait":"1ea2e5878cxxx4b8bf4882",
  13. "is_bind_mobile":"1",
  14. "blood":"2",
  15. "username":"凌***丿"
  16. },
  17. "source":"BAIDU",
  18. "token":{
  19. "accessToken":"121.7f063a00b80xxxP8H6YxcJqD.C3r33w",
  20. "expireIn":2592000,
  21. "refreshToken":"122.b8cff99fe00cbxxxxZt-xSF906TGkEmPvdEn.IUdj0g",
  22. "scope":"basic"
  23. },
  24. "username":"凌***丿",
  25. "uuid":"oD0ag_m52xxxWP2Dbm1X"
  26. }
  27. }

参考

JustAuth:集成第三方企业平台指南-百度登录
https://justauth.wiki/guide/oauth/baidu/