精华内容
下载资源
问答
  • OAuth2 JustAuth实战

    2020-09-03 11:08:28
    1.创建第三方平台应用,申请配置信息 基本上按照这篇博客的...2.加入JustAuth工具类 2.1创建spring boot项目,加入pring-boot-starter-web和lombok依赖 2.2加入JustAuth依赖 // ... <dependency> <groupId&

    1.创建第三方平台应用,申请配置信息

    基本上按照这篇博客的教程完成。

    以github为例,在developer settings–>OAuth App上申请第三方应用,获得配置信息,以下是注册好应用后的浏览信息页面:

    在这里插入图片描述

    2.加入JustAuth工具类

    2.1创建spring boot项目,加入pring-boot-starter-web和lombok依赖

    2.2加入JustAuth依赖

    // ...
            <dependency>
                <groupId>me.zhyd.oauth</groupId>
                <artifactId>JustAuth</artifactId>
                <version>1.15.1</version>
            </dependency>
            // ...
    

    最终获得pom.xml如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.3.3.RELEASE</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    
    	<groupId>com.example</groupId>
    	<artifactId>demo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>demo</name>
    	<description>Demo project for Spring Boot</description>
    
    	<properties>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>me.zhyd.oauth</groupId>
    			<artifactId>JustAuth</artifactId>
    			<version>1.15.1</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web-services</artifactId>
    		</dependency>
    
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<optional>true</optional>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    			<exclusions>
    				<exclusion>
    					<groupId>org.junit.vintage</groupId>
    					<artifactId>junit-vintage-engine</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

    3.简洁的三部曲

    添加一个Controller类,用于处理页面和后端之间的请求,

    3.1 申请授权页面

    由于集成的是github,所以请求链接的动态参数{source}传入的是github,所以我们会在 http://localhost:8080/oauth/render/github上请求授权。

    @RequestMapping("/render/{source}")
        public void renderAuth(HttpServletResponse response) throws IOException {
            AuthRequest authRequest = getAuthRequest();
            String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
            response.sendRedirect(authorizeUrl);
        }
    

    3.2 获取AuthRequest,生成授权url

    因为是向Github请求授权,所以直接实例化AuthGithubRequest( ),创建授权申请时填入之前在Github上获得的客户端Id和Secret,以及授权完毕后的跳转url。
    在这里插入图片描述
    CSRF攻击 写错了别在意

    3.3认证登录

    在授权页面同意授权后,会跳转到redirect_url也就是http://localhost:8080/oauth/callback/github,并携带code、state等参数,callback是页面request的入参。

    @RequestMapping("/callback/{resource}")
        public Object login(AuthCallback callback) {
            AuthRequest authRequest = getAuthRequest();
            return authRequest.login(callback);
        }
    

    回调时会报告Http实现类未指定,这个在之前的教程中也给出了原因和解决方案,加入依赖即可。
    在这里插入图片描述
    会返回如图页面,这表示github授权成功啦。url中包含了code和state,response会返回一个JSON,accesstoken就是OAuth的通行令牌,可以通过它有限定期限地访问github中授权用户的信息。

    上面的教程还提出了state的自定义redis缓存和集成gitlab私服,在yt的项目中都有运用到。

    展开全文
  • 什么是 JustAuthJustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy! JustAuth 集成了诸如:Github、Gitee、支付宝、新浪微博、微信、...

    什么是 JustAuth?

    JustAuth,如你所见,它仅仅是一个第三方授权登录工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy!

    JustAuth 集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow等国内外数十家第三方平台。更多请参考已集成的平台

    有哪些特点?

    1. :已集成十多家第三方平台(国内外常用的基本都已包含),仍然还在持续扩展中(开发计划)!
    2. :API就是奔着最简单去设计的(见后面快速开始),尽量让您用起来没有障碍感!

    有哪些功能?

    • 集成国内外数十家第三方平台,实现快速接入。参考文档
    • 自定义 State 缓存,支持各种分布式缓存组件。参考文档
    • 自定义 OAuth 平台,更容易适配自有的 OAuth 服务。参考文档
    • 自定义 Http 实现,选择权完全交给开发者,不会单独依赖某一具体实现。参考文档
    • 自定义 Scope,支持更完善的授权体系。参考文档
    • 更多...参考文档

    参考文档:

    https://gitee.com/yadong.zhang/JustAuth

    https://gitee.com/yadong.zhang/JustAuth-demo/tree/master

    快速开始

    • 引入依赖
    <dependency>
        <groupId>me.zhyd.oauth</groupId>
        <artifactId>JustAuth</artifactId>
        <version>1.15.7</version>
    </dependency>

    微信支付示例:

    @RestController
    @RequestMapping("/oauth")
    public class OauthController {
    
        private static final String WebAppId= "微信AppId";
        private static final String WebAppSecret = "微信AppSecret";
        private static final String WebRedirectUri = "http://zlwj.jiajgou.com/wx/callback";
    
        @RequestMapping("/login/{source}")
        public void renderAuth(HttpServletResponse response, @PathVariable("source") String source) throws IOException {
    
            AuthRequest authRequest = getAuthRequest(source);
    
            String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
            response.sendRedirect(authorizeUrl);
        }
    
    
        /**
         * 根据具体的授权来源,获取授权请求工具类
         *
         * @param source
         * @return
         */
        private AuthRequest getAuthRequest(String source) {
            AuthRequest authRequest = null;
            switch (source) {
                case "wechat":
                    authRequest = new AuthWeChatOpenRequest(AuthConfig.builder()
                            .clientId(WebAppId)
                            .clientSecret(WebAppSecret)
                            .redirectUri(WebRedirectUri)
                            .build());
                    break;
    
                default:
                    break;
            }
            if (null == authRequest) {
                throw new AuthException("未获取到有效的Auth配置");
            }
            return authRequest;
        }
    
    }

     

    展开全文
  • JustAuth.version>1.13.2</JustAuth.version> <justauth.version>1.3.2</justauth.version> </properties> <dependency> <groupId>me.zhyd.oauth</groupId>

    仅供参考.不具有通用性.

    首先,依赖文件中添加

    <properties>
        <JustAuth.version>1.13.2</JustAuth.version>
        <justauth.version>1.3.2</justauth.version>
    </properties>
    <dependency>
        <groupId>me.zhyd.oauth</groupId>
        <artifactId>JustAuth</artifactId>
        <version>${JustAuth.version}</version>
    </dependency>
    
    <!-- 第三方登录  -->
    <dependency>
        <groupId>com.xkcoding.justauth</groupId>
        <artifactId>justauth-spring-boot-starter</artifactId>
        <version>${justauth.version}</version>
    </dependency>
    
    <!-- freemarker -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.xml</include>
                    <include>**/*.json</include>
                    <include>**/*.ftl</include>      用于查找templates中用于跳转的ftl文件
                </includes>
            </resource>
        </resources>
    </build>
    resources文件夹下新建templates目录,新建thirdLogin.ftl用于做页面跳转.window.opener.postMessage("${token}", "*");与前端window.addEventListener('message', receiveMessage, false)对应.
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
        <title>第三方登录</title>
    </head>
    <body>
    登陆中...
    <script>
        window.onload = function () {
            setTimeout(function (){
                var thirdLoginInfo = "${token}";
                console.log("thirdLoginInfo",thirdLoginInfo);
                window.opener.postMessage("${token}", "*");
                window.close();
            },1000)
        }
    </script>
    </body>
    </html>

    新建application-just.yml 用来单独存放justauth的配置信息

    # 第三方登录
    justauth:
      enabled: true
      extend:
        enum-class: com.alvis.exam.justauth.AuthExtendSource
        config:
          VPGIT:
            requestClass: com.alvis.exam.justauth.AuthVpGitRequest
            client-id: gitlab上为此application配置生成id
            client-secret: gitlab上为此application配置生成的secret
            redirect-uri: gitlab上配置的返回地址,如http://localhost:8081/xxxxx/xxx/xxxx/thirdLogin/xxgit/callback
      cache:
        # 缓存类型(default-使用JustAuth内置的缓存、redis-使用Redis缓存、custom-自定义缓存)
        type: default
        prefix: 'JUSTAUTH::STATE::'
        # 超时时长
        timeout: 1h
    修改application.yml配置
    spring:
      profiles:
        active:  ${spring.profiles.active}
        include:
          - just
      #配置freemarker
      freemarker:
        # 设置模板后缀名
        suffix: .ftl
        # 设置文档类型
        content-type: text/html
        # 设置页面编码格式
        charset: UTF-8
        # 设置页面缓存
        cache: false
        prefer-file-system-access: false
        # 设置ftl文件路径
        template-loader-path:
          - classpath:/templates
        settings:
          classic_compatible: true

    自定义第三方认证扩展

    public enum AuthExtendSource implements AuthSource {
        xxGIT {
            @Override
            public String authorize() {
                return "公司私服域名/gitlab/oauth/authorize";
            }
    
            @Override
            public String accessToken() {
                return "公司私服域名/gitlab/oauth/token";
            }
    
            @Override
            public String userInfo() {
                return "公司私服域名/gitlab/api/v4/user";
            }
        }
    }
    
    public class AuthxxGitRequest extends AuthDefaultRequest {
        public AuthVpGitRequest(AuthConfig config) {
            super(config, AuthExtendSource.xxGIT);
        }
    
        public AuthVpGitRequest(AuthConfig config, AuthStateCache authStateCache) {
            super(config, AuthExtendSource.xxGIT, authStateCache);
        }
    
        @Override
        protected AuthToken getAccessToken(AuthCallback authCallback) {
            HttpResponse response = this.doPostAuthorizationCode(authCallback.getCode());
            JSONObject object = JSONObject.parseObject(response.body());
            this.checkResponse(object);
            return AuthToken.builder().accessToken(object.getString("access_token")).refreshToken(object.getString("refresh_token")).idToken(object.getString("id_token")).tokenType(object.getString("token_type")).scope(object.getString("scope")).build();
        }
    
        @Override
        protected AuthUser getUserInfo(AuthToken authToken) {
            HttpResponse response = this.doGetUserInfo(authToken);
            JSONObject object = JSONObject.parseObject(response.body());
            this.checkResponse(object);
            return AuthUser.builder().uuid(object.getString("id")).username(object.getString("username")).nickname(object.getString("name")).avatar(object.getString("avatar_url")).blog(object.getString("web_url")).company(object.getString("organization")).location(object.getString("location")).email(object.getString("email")).remark(object.getString("bio")).gender(AuthUserGender.UNKNOWN).token(authToken).source(this.source.toString()).build();
        }
    
        private void checkResponse(JSONObject object) {
            if (object.containsKey("error")) {
                throw new AuthException(object.getString("error_description"));
            } else if (object.containsKey("message")) {
                throw new AuthException(object.getString("message"));
            }
        }
    
        @Override
        public String authorize(String state) {
            return UrlBuilder.fromBaseUrl(super.authorize(state)).queryParam("scope", "read_user+openid+profile+email").build();
        }
        
    }

    controller层

    @Controller
    @RequestMapping("/thirdLogin")
    @Slf4j
    public class ThirdLoginController {
       @Autowired
       private ISysUserService sysUserService;
       
       @Autowired
       private BaseCommonService baseCommonService;
       @Autowired
        private RedisUtil redisUtil;
       @Autowired
       private AuthRequestFactory factory;
    
       @RequestMapping("/render/{source}")
        public void render(@PathVariable("source") String source, HttpServletResponse response) throws IOException {
            log.info("第三方登录进入render:" + source);
            AuthRequest authRequest = factory.get(source);
            String authorizeUrl = authRequest.authorize(AuthStateUtils.createState());
            log.info("第三方登录认证地址:" + authorizeUrl);
            response.sendRedirect(authorizeUrl);
        }
       
       @RequestMapping("/{source}/callback")
        public String login(@PathVariable("source") String source, AuthCallback callback,ModelMap modelMap) {
          log.info("第三方登录进入callback:" + source + " params:" + JSONObject.toJSONString(callback));
            AuthRequest authRequest = factory.get(source);
            AuthResponse response = authRequest.login(callback);
            log.info(JSONObject.toJSONString(response));
            VpResult<JSONObject> result = new VpResult<JSONObject>();
            if(response.getCode()==2000) {
                
               JSONObject data = JSONObject.parseObject(JSONObject.toJSONString(response.getData()));
               String username = data.getString("username");
               String avatar = data.getString("avatar");
               String uuid = data.getString("uuid");
               
               //判断有没有这个人
               LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<SysUser>();
               query.eq(SysUser::getThirdId, uuid);
               query.eq(SysUser::getThirdType, source);
               List<SysUser> thridList = sysUserService.list(query);
               SysUser user = null;
               if(thridList==null || thridList.size()==0) {
                  user = new SysUser();
                  user.setActivitiSync(CommonConstant.ACT_SYNC_0);
                  user.setDelFlag(CommonConstant.DEL_FLAG_0);
                  user.setStatus(1);
                  user.setThirdId(uuid);
                  user.setThirdType(source);
                  user.setAvatar(avatar);
                  user.setUsername(uuid);
                  user.setRealname(username);
                  
                  //设置初始密码
                  String salt = oConvertUtils.randomGen(8);
                 user.setSalt(salt);
                 String passwordEncode = PasswordUtil.encrypt(user.getUsername(), "123456", salt);
                 user.setPassword(passwordEncode);
                  sysUserService.saveThirdUser(user);
               }else {
                  //已存在 只设置用户名 不设置头像
                  user = thridList.get(0);
                  //user.setUsername(username);
                  //sysUserService.updateById(user);
               }
               // 生成token
              String token = JwtUtil.sign(user.getUsername(), user.getPassword());
              redisUtil.set(CommonConstant.PREFIX_USER_TOKEN + token, token);
              // 设置超时时间
              redisUtil.expire(CommonConstant.PREFIX_USER_TOKEN + token, JwtUtil.EXPIRE_TIME / 1000);
    
             //update-begin-author:taoyan date:20200812 for:登录缓存用户信息
             LoginUser redisUser = new LoginUser();
             BeanUtils.copyProperties(user, redisUser);
             redisUser.setPassword(SecureUtil.md5(user.getPassword()));
             redisUtil.set(CacheConstant.SYS_USERS_CACHE_JWT +":" +token, redisUser);
             redisUtil.expire(CacheConstant.SYS_USERS_CACHE_JWT +":" +token, JwtUtil.EXPIRE_TIME*2 / 1000);
             //update-end-author:taoyan date:20200812 for:登录缓存用户信息
    
              modelMap.addAttribute("token", token);
          //update-begin--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
            }else{
             modelMap.addAttribute("token", "登录失败");
          }
          //update-end--Author:wangshuai  Date:20200729 for:接口在签名校验失败时返回失败的标识码 issues#1441--------------------
            result.setSuccess(false);
            result.setMessage("第三方登录异常,请联系管理员");
            return "thirdLogin";
        }
       
       @SuppressWarnings("unchecked")
       @RequestMapping(value = "/getLoginUser/{token}", method = RequestMethod.GET)
       @ResponseBody
       public VpResult<JSONObject> getLoginUser(@PathVariable("token") String token) throws Exception {
          VpResult<JSONObject> result = new VpResult<JSONObject>();
          String username = JwtUtil.getUsername(token);
          
          //1. 校验用户是否有效
          SysUser sysUser = sysUserService.getUserByName(username);
          result = sysUserService.checkUserIsEffective(sysUser);
          if(!result.isSuccess()) {
             return result;
          }
          JSONObject obj = new JSONObject();
          //用户登录信息
          obj.put("userInfo", sysUser);
          //token 信息
          obj.put("token", token);
          result.setDataInfo(obj);
          result.setSuccess(true);
          result.setReturnCode(200);
          baseCommonService.addLog("用户名: " + username + ",登录成功[第三方用户]!", CommonConstant.LOG_TYPE_1, null);
          return result;
       }
       
    }

    注意vue.config.js下的网关映射

    vue 

    <div class="text-foot">
      <span>其他登陆方式</span>
      <a @click="onThirdLogin('vpgit')" title="gitlab" class="item-icon">
        <a-icon type="gitlab"></a-icon>
      </a>
    </div>

    methods中

    /**
       * 第三方登录
       * @param token
       * @returns {*}
       */
    thirdLoginApi (token) {
      return axios({
        url: process.env.VUE_APP_API + `/thirdLogin/getLoginUser/${token}`,
        method: 'get',
        headers: {
          'Content-Type': 'application/json;charset=UTF-8'
        }
      })
    },
    
    ThirdLogin (token) {
      let that = this
      return new Promise((resolve, reject) => {
        console.log('token:', token)
        that.thirdLoginApi(token).then(response => {
          if (response.data.code === 1) {
            resolve(response)
            this.loginForm.password = response.userInfo.password
            console.log('success', response)
          } else {
            reject(response)
            console.log('failed')
          }
        }).catch(error => {
          reject(error)
        })
      }).catch((e) => {})
    },
    
    // 第三方登录
    onThirdLogin (source) {
      let url = process.env.VUE_APP_API + `/thirdLogin/render/${source}`
      window.open(url, `login ${source}`, 'height=500, width=500, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no')
      let that = this
      let receiveMessage = function (event) {
        var origin = event.origin
        console.log('origin', origin)
    
        let token = event.data
        console.log('event.data', token)
        that.ThirdLogin(token).then(result => {
          if (result && result.data.code === 1) {
            let _this = that
            this.loading = true
            _this.loginForm.userName = result.data.response.token
            console.log('username:', _this.loginForm.userName)
            _this.setUserName(_this.loginForm.userName)
            _this.loginForm.password = result.data.response.userInfo.password
            console.log('loginForm:', _this.loginForm)
            loginApi.login(_this.loginForm).then(function (result) {
              console.log('loginapi result', result)
              if (result && result.code === 1) {
                console.log('登陆成功')
                window.removeEventListener('message', receiveMessage, false)       // 解除监听
                _this.setUserName(_this.loginForm.userName)
                _this.$router.push({ path: '/' })
              } else {
                _this.loading = false
                _this.$message.error(result.message)
                window.removeEventListener('message', receiveMessage, false)
              }
            }).catch(function (reason) {
              _this.loading = false
            })
          } else {
            return false
          }
        })
      }
      window.addEventListener('message', receiveMessage, false)
    },
    展开全文
  • JustAuth v1.15.7 正式发布! 此次额外更新内容: 升级在github平台上获取资源时的访问令牌的使用方式。参考: Deprecating API authentication through query parameters 解决Issue 89 #89 在Github的官方声明中...

    JustAuth v1.15.7 正式发布!

    此次额外更新内容:

    在Github的官方声明中可知,在后续的版本中,将不再支持以 Url 参数的形式传递 access_token,而建议改用 Header 的方式传递,因为这种方式将更加安全。

    Using access_token as a query param
    If you’re currently making an API call similar to

    curl "https://api.github.com/user/repos?access_token=my_access_token"
    

    Instead, you should send the token in the header:

    curl -H 'Authorization: token my_access_token' https://api.github.com/user/repos
    

    当前版本中,虽然可以以 Url 参数的形式正常使用 access_token, 但会收到 Github 的提示邮件,内容如下:

    在这里插入图片描述

    JustAuth 在 1.15.7 版本中,就已经按照Github官方文档升级了access_token的传递方式,各位开发者们,可以将 JA 升级到最新版本使用。

    展开全文
  • <div><ol>集成 JustAuth 实现社会化登录。</li><li>修改账密登录、注册、手机号登录、修改密码页面的按钮样式 ...
  • justauth-spring-boot-starter V1.3.5 发布成功 关于 justauth-spring-boot-starter justauth-spring-boot-starter 是 Spring Boot 集成 JustAuth 的最佳实践。如果你的项目是基于 Spring Boot 构建,则推荐你用...
  • Spring security 集成 JustAuth 实现第三方授权登录脚手架: 一、特性 spring security 集成 JustAuth 实现第三方授权登录: 此项目从 用户管理脚手架(UMS):https://github.com/ZeroOrInfinity/UMS | ...
  • JustAuth 1.15.5 正式发布! 关于JustAuth JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! v1.15.5 本次更新内容较多,解决了一些已知的 ...
  • justauth:enabled: truetype:QQ:client-id: 10**********6client-secret: 1f7d08**********5b7**********29eredirect-uri: http://oauth.xkcoding.com/demo/oauth/qq/callbackunion-id: falseWEIBO:client-id: 10***...
  • spring boot+Vue整合第三方登录JustAuth

    千次阅读 2019-11-21 21:27:13
    JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! github地址:https://github.com/justauth/JustAuth 对于spirng boot+Vue前后端分离的项目...
  • 1. 简介   随着科技时代日渐繁荣,越来越多的应用融入我们的生活。...  本文基于JustAuth实现第三方授权登录,选择JustAuth原因如下: 支持Github、Gitee、微博、钉钉、百度、Coding、腾讯云开发者平台、OSChin...
  • JustAuth 1.14.0版本正式发布,解耦HTTP工具,方便开发者自实现或者自主选择第三方依赖,增加开发便利性。 文章内所有的引用链接,都会用【x】标注,并且在文末给出详情 前言 在之前的版本中,JustAuth【1】默认...
  • 二、 基于SpringBoot整合JustAuth 三部曲 1、pom.xml中引入相关依赖 <!-- reids --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-...
  • JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 本专栏将会由浅入深,详细介绍如何使用JustAuth实现第三方登录,以及如何使用JustAuth的高级...
  • 前言 上次给大家安利的一款...这个项目取名JustAuth,如您所见,就像它的名字一样,这仅仅是一个第三方授权登录的工具类库,仅此而已。 本文会总结一下如何使用Github实现授权登录 接入流程 这个开源库的接入流程...
  • JustAuth更新内容 JustAuth今天更新了两个版本,v1.9.3算是一个过渡版本,不过仍然存在一些问题,建议直接升级到v1.9.4。 v1.9.3 AuthConfig类中去掉state参数 删除AuthState类 增加authorize(String)方法,并且...
  • JustAuth【1】 已发布1.13.2版本,新增微信公众平台的授权登录 文章内所有的引用链接,都会用【x】标注,并且在文末给出详情 本次更新内容如下 新增 增加微信、QQ、支付宝、微博授权登录的帮助文档,请参考帮助...
  • JustAuth1.9.0版本正式来袭!Teambition、人人、Pinterest、Stack Overflow等尽收眼底! 首先感谢各位朋友对JustAuth的关注,JustAuth在过去一周左右的时间内,增加了600+的关注,在这儿感谢各位的厚爱!感谢朋友们...
  • JustAuth于2019年7月21日正式喜提码云(gitee.com)最有价值开源项目GVP ( Gitee Most Valuable Project ) 称号! 感谢朋友们的支持! @小凯 @Hongwei.Peng @春哥 @skqing 以及所有提交pr和issue的朋友们! ...
  • 使用justauth 我觉得这个就没啥好说的了,直接用这个教程就好:Spring Boot 快速集成第三方登录功能 vue调用接口 呜呜呜,这里才是让人头疼的地方啊,跨域,跨域还是跨域问题。 我开始想直接通过axios来调用后端的...
  • JustAuth发布1.10.0版本,集成华为和企业微信登录,更加灵活的state缓存 更新内容 新增 增加AuthCache配置类AuthCacheConfig.java,可以自定义缓存有效期以及是否开启定时任务 简单封装极简版的针对JustAuth的Log...
  • JustAuth(gitee | github),如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! JustAuth的功能 史上最全的整合第三方登录的工具,目前已支持Github、...
  • JustAuth,如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第三方登录SDK,让登录变得So easy! 项目开源地址:gitee|github 项目文档:参考文档 特点 废话不多说,就俩字: 全:已集成...
  • JustAuth 已发布1.13.2版本,新增微信公众平台的授权登录本次更新内容如下新增增加微信、QQ、支付宝、微博授权登录的帮助文档,请参考[帮助文档](JustAuth - 史上最全的整合第三方登录的开源库)合并[PR#57](:...
  •   在之前博客:SpringBoot基于JustAuth实现第三方授权登录 和 SpringBoot + Layui +Mybatis-plus实现简单后台管理系统(内置安全过滤器)上改造,除了原始的用户名和密码登录外,增加第三方登录认证。 2. 改造流程 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 110
精华内容 44
关键字:

JustAuth