单点登陆后续社交登录(以gitee为例)

什么是OAuth2.0
OAuth: OAuth(开放授权)是一个开放标准,允许用户授权第三方网站访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方网站或分享他们数据的所有内容。
OAuth2.0:对于用户相关的OpenAPI(例如获取用户信息,动态同步,照片,日志,分享等),为了保护用户数据的安全和隐私,第三方网站访问用户数据前都需要显式的向用户征求授权。

创建gitee第三方应用

文档地址:https://gitee.com/api/v5/oauth_doc#/

登录gitee–设置–第三方应用–创建新应用

在这里插入图片描述

代码编写

前端

应用通过 浏览器 或 Webview 将用户引导到码云三方认证页面上( GET请求 )

https://gitee.com/oauth/authorize?client_id={client_id}&redirect_uri={redirect_uri}&response_type=code
<a href="https://gitee.com/oauth/authorize?client_id=9ba91021257126a00aadd1e0c07c14a7d52b0cc9172452b7212dcd67e5f742e3&redirect_uri=http://auth.gulimail.com/oauth2.0/gitee/success&response_type=code&scope=user_info%20emails">
<img src="GIT_img/gitee.png" style="width: 50px;height: 18px" />
<span></span>
</a>

后端

@GetMapping("/oauth2.0/gitee/success")
    public String gitee(@RequestParam("code") String code, HttpSession session, HttpServletResponse servletResponse, HttpServletRequest request) throws Exception {
        Map<String, String> header = new HashMap<>();
        Map<String, String> query = new HashMap<>();

        Map<String, String> map = new HashMap<>();

        map.put("client_id", "9ba91021257126a00aadd1e0c07c14a7d52b0cc9172452b7212dcd67e5f742e3");
        map.put("client_secret", "???????????????????????????");
        map.put("grant_type", "authorization_code");
        map.put("redirect_uri", "http://auth.gulimail.com/oauth2.0/gitee/success");
        map.put("code", code);
        //1、根据code换取accessToken;
        //应用服务器 或 Webview 使用 access_token API 向 码云认证服务器发送post请求传入 用户授权码 以及 回调地址( POST请求 ),自己寻找HttpUtils工具发送请求
        //注:请求过程建议将 client_secret 放在 Body 中传值,以保证数据安全。
        //https://gitee.com/oauth/token?grant_type=authorization_code&code={code}&client_id={client_id}&redirect_uri={redirect_uri}&client_secret={client_secret}
        HttpResponse response = HttpUtils.doPost("https://gitee.com", "/oauth/token", "post", header, query, map);

        //2、处理
		
        if (response.getStatusLine().getStatusCode() == 200) {
            //获取到了 accessToken
            String json = EntityUtils.toString(response.getEntity());
            SocialUser socialUser = JSON.parseObject(json, SocialUser.class);
            Map<String, String> map1 = new HashMap<>();
            map1.put("access_token", socialUser.getAccess_token());
            HttpResponse response1 = HttpUtils.doGet("https://gitee.com", "/api/v5/user", "get", header, map1);
            String json1 = EntityUtils.toString(response1.getEntity());
            JSONObject jo = JSON.parseObject(json1);
            socialUser.setUid(jo.getString("id"));




            //知道当前是哪个社交用户
            //1)、当前用户如果是第一次进网站,自动注册进来(为当前社交用户生成一个会员信息账号,以后这个社交账号就对应指定的会员)
            //登录或者注册这个社交用户
            R oauthlogin = memberFeignService.oauthlogin(socialUser);
            if (oauthlogin.getCode() == 0) {
                MemberRespVo data = oauthlogin.getData("data", new TypeReference<MemberRespVo>() {
                });
               log.info("登录成功:用户:{}", data.toString());
                //1、第一次使用session;命令浏览器保存卡号。JSESSIONID这个cookie;
                //以后浏览器访问哪个网站就会带上这个网站的cookie;
                //子域之间; gulimall.com  auth.gulimall.com  order.gulimall.com
                //发卡的时候(指定域名为父域名),即使是子域系统发的卡,也能让父域直接使用。
                //TODO 1、默认发的令牌。session=dsajkdjl。作用域:当前域;(解决子域session共享问题)
                //TODO 2、使用JSON的序列化方式来序列化对象数据到redis中
                session.setAttribute(AuthServerConstant.LOGIN_USER, data);
//                new Cookie("JSESSIONID","dadaa").setDomain("");
//                servletResponse.addCookie();
                //2、登录成功就跳回首页
                return "redirect:http://gulimail.com";

            } else {
                return "redirect:http://auth.gulimail.com/login.html";
            }

        } else {
            return "redirect:http://auth.gulimail.com/login.html";
        }
    }
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
MaxKey(马克思的钥匙)用户单点登录认证系统(Sigle Sign On System),寓意是最大钥匙,是业界领先的企业级IAM身份管理和身份认证产品,支持OAuth 2.0/OpenID Connect、SAML 2.0、JWT、CAS等标准化的开放协议,提供简单、标准、安全和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 MaxKey主要功能: 1、所有应用系统共享一个身份认证系统 2、所有应用系统能够识别和提取ticket信息 3、提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。 4、提供用户生命周期管理,支持SCIM 2协议,基于Apache Kafka代理,通过连接器(Connector)实现身份供给同步。 5、认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。 6、多种认证机制并存,各应用系统可保留原有认证机制,同时集成认证中心的认证;应用具有高度独立性,不依赖认证中心,又可用使用认证中心的认证,实现单点登录。 7、基于Java平台开发,采用Spring、MySQL、Tomcat、Apache Kafka、Redis等开源技术,支持微服务,扩展性强。 8、许可证 Apache License, Version 2.0,开源免费。     MaxKey单点登录认证系统 更新日志: v2.7.0 加入Dromara开源组织,官方网站的优化,文档优化 BootJar,Docker,Standard三种打包方式的配置优化 openldap,activedirectory密码验证支持 数据库访问注释由@Service改为@Repository cas logout优化支持 CAS单点注销及返回数据类型适配器的优化 CAS返回数据类重构 CAS地址优化统一配置到常量类CasConstants 注销空指针异常BUG OAuth2地址优化统一配置常量类OAuth2Constants OAuth2 Token多次调用时认证转换的BUG ExtendApi标准优化 增加基于时间签名的ExtendApi适配器 返回数据Constants整合 扩展数据配置优化 LDAP和MS AD固定属性Constants SpringSecurity OAuth 2客户端登录适配 移除Desktop的支持,后续可以开发FormBase的适配器定制 application.properties profiles的优化,不同环境启动更加简单 删除maxkey.properties,配置整合到 application.properties 增加适配器注册功能,在配置应用时只需选择对应的适配器 增加Synchronizer接口同步的功能 增加TimeBased OTP接口支持 XSS安全防护功能 禅道项目管理系统单点登录适配 GitLab单点登录适配 云速邮箱单点登录适配 JumpServer开源堡垒机单点登录适配 华为云单点登录适配 Jenkins单点登录适配 通知公告简单功能实现 查询参数优化 SDK优化 依赖jar引用、更新和升级
单点登录(Single Sign-On,简称SSO)是一种身份验证和授权机制,允许用户使用一组凭据(例如用户名和密码)登录到一个系统后,就可以无需再次输入凭据即可访问其他系统。JMeter是一款功能强大的性能测试工具,也可以用于模拟单点登录过程。 在JMeter中模拟单点登录过程,可以按照以下步骤进行: 1. 添加线程组:在JMeter中,首先需要添加一个线程组,用于模拟并发用户。 2. 添加HTTP请求:在线程组下添加一个HTTP请求,默认情况下,该请求将用于模拟用户登录。 3. 配置登录请求:在HTTP请求中,配置登录请求的URL、请求方法(POST或GET)以及请求参数(用户名、密码等)。 4. 提取登录后的凭证:在登录请求后,可以使用JMeter提供的正则表达式提取登录后的凭证(例如,会话ID或令牌),以便在后续请求中使用。 5. 添加其他HTTP请求:在登录请求后,可以添加其他HTTP请求,模拟用户在登录后访问其他系统或接口。 6. 配置其他请求:对于每个其他请求,配置URL、请求方法和必要的请求参数。 7. 使用提取的凭证:对于需要使用登录后凭证的请求,可以使用JMeter提供的变量功能,将提取的凭证作为请求参数或请求头的一部分。 8. 运行测试计划:配置完所有请求后,可以运行JMeter的测试计划,模拟单点登录过程。 请注意,具体的单点登录过程和配置可能因系统而异,上述步骤仅提供了一个基本的框架。在实际使用中,您需要根据目标系统的要求和接口文档进行相应的配置和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值