首页 > 其他分享 >第三方登录实现及基本原理

第三方登录实现及基本原理

时间:2023-11-21 12:11:05浏览次数:25  
标签:QQ 登录 基本原理 platform 应用 第三方 客户端

一、什么是第三方登录?

简单来讲,就是用户可以通过已有网站或应用的账号,登录我们自己的应用;如常见的QQ,微信,微博;效果是,如果不需要在我们应用再次注册账户,直接使用QQ,微信,微博等平台账户就可以登录我们的应用。 如图:

 

第三方登录解决了什么问题?

降低用户使用产品的门槛;因为,注册和登录,确实是一个比较麻烦的事情。

二、原理

基本原理:

当用户点击第三方登录时,会跳转到第三方登录SDK内部;用户输入第三方登录用户名或密码,有些第三方登录平台,可以直接调用已经登录的账号,例如:QQ;完成第三方平台登录的;登录完成后,第三方平台,或者SDK会回调我们的应用,在回调的信息里面,可以拿到用户在第三方平台的OpenId,以及昵称,头像等信息。

详细流程如下:

 

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源

更仔细的原理学习,请参考下链,本文着重应用层面的实现流程
OAuth 2 深入介绍
OAuth 2 Simplified • Aaron Parecki

三、实现流程

 

1、到各第三方服务平台中创建应用

这一步,几乎是所有集成第三方服务需要的步骤。

根据不同的平台,不同的服务,提供的信息也不一样,可能需要提供,用户名称,应用类型,应用平台(iOS,Android,Web),BundleId等信息,以下用接入QQ登录服务为例讲解

1)进入qq开放者平台,接入应用应用

 

2)开始创建,进入创建页面,点击“创建应用”
注意:首次使用一般要认证身份,自行认证一下就行 

 

3)接下来填写安装包名及签名信息即可,提交后等待审核,此时也=就已经可以调用登录接口,只是有一些限制,通过审核后就完全可调用,一般3天内

4)审核通过后如图: 

 

5)点击查看,获取APP ID和 APP Key:
这两个信息在集成SDK时要用 

 

2、获取应用信息

从上面的5)可获取

3、客户端集成SDK

这里使用的是ShareSDK,因为:

  1. 聚合了很多第三方平台,包括QQ,微信,微博,支付宝等;
  2. 可以实现分享,第三方登录等功能。
  3. 对外提供统一的登录,分享接口;他屏蔽了不同SDK之间的API差异,这里使用它就可以更加轻松的集成QQ,微信,微博,支付宝等平台了。

虽然前面在QQ创建了应用,但由于用到了ShareSDK,他也是一个第三方服务,所以也要创建应用,同样最终是要获取到AppKey这样的信息,过程和QQ差不多,这里不再赘述

SharedSDK执行时序图(底层原理还是上面上面说的OAuth2):

162467485989765.12.png

完整集成步骤:MobTech集成文档-MobTech

4、初始化SDK

初始化SDK.png

4、业务调用SDK接口,实现三方登录

下述代码以点击登录按钮,实现三方QQ登录为例:

  java 复制代码
public void onQQLoginClick() {
    //初始化具体的平台
    Platform platform = ShareSDK.getPlatform(QQ.NAME);

    //设置false表示使用SSO授权方式
    platform.SSOSetting(false);

    //回调信息
    //可以在这里获取基本的授权返回的信息
    platform.setPlatformActionListener(new PlatformActionListener() {
        /**
         * 登录成功了
         * @param platform
         * @param i
         * @param hashMap
         */
        @Override
        public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
            //登录成功了

            //就可以获取到昵称,头像,OpenId
            //该方法回调不是在主线程

            //从数据库获取信息
            //也可以通过user参数获取
            PlatformDb db = platform.getDb();

            data = new User();

            PlatformDb db = platform.getDb();
            String nickname = db.getUserName();
            String avatar = db.getUserIcon();
            String openId = db.getUserId();

            LogUtil.d(TAG, "other login success:" + nickname + "," + avatar + "," + openId + "," + HandlerUtil.isMainThread());
        }

        /**
         * 登录失败了
         * @param platform
         * @param i
         * @param throwable
         */
        @Override
        public void one rror(Platform platform, int i, Throwable throwable) {
            LogUtil.d(TAG, "other login error:" + throwable.getLocalizedMessage() + "," + HandlerUtil.isMainThread());
        }

        /**
         * 取消登录了
         * @param platform
         * @param i
         */
        @Override
        public void onCancel(Platform platform, int i) {
            LogUtil.d(TAG, "other login cancel:" + i + "," + HandlerUtil.isMainThread());
        }
    });

    //authorize与showUser单独调用一个即可
    //授权并获取用户信息
    platform.showUser(null);
}

这样,就已经达到三方登录的目的了,咱们可以根据拿到的三方应用应用信息,展示到我们对应的客户端上

其他接口说明:

其他接口说吗.png

注意:

  复制代码
这只是走通三方登录的流程,在上线的项目中,流程会更加复杂,比如:
往往需要后台的登录接口,判断是否登录成功,如果成功,则表示这个用户已经补充了资料(也可以理解为已经注
册了);如果返回“用户不存在”,则表示这个用户还没有注册,客户端跳转到补充用户资料界面,补充完成后,
调用用户注册逻辑,注册成功后,调用登录逻辑

大家可自行根据业务场景去细化,融会贯通


作者:JWL
链接:https://juejin.cn/post/7074156327957692429
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:QQ,登录,基本原理,platform,应用,第三方,客户端
From: https://www.cnblogs.com/wxdlut/p/17846335.html

相关文章

  • 免密登录远程主机(Linux)
    Windows(本地):生成公钥和私钥:ssh-keygen-trsa一直回车,默认就行了.文件会生成在用户目录的下的.ssh文件夹中,公钥和私钥分别为:id_rsa.pub和id_rsaLinux(远端):在当前用户home目录的下的.ssh文件夹(如不存在则需自己创建)中,创建authorized_keys文件(如不存在):将Windows(本地)生......
  • VMware ESXI 无法使用密码登录
    一、打开VMware ESXI机器,按catl+alt+f1 切换到字符界面二、修改配置文件vi/etc/ssh/sshd_config找到这行:PasswordAuthenticationno修改为:PasswordAuthenticationyes 三、ssh远程连接即可......
  • 使用手机号实现注册功能、短信登录注册、前端登录注册
    使用手机号实现注册功能#前端传入的数据 {手机号,验证码,密码}#后端要验证数据--->序列化类#注意错误 1注册使用哪个序列化了:get_serializer_class2配置文件中debug必须是True,因为咱们有万能验证码--->正常流程这个不需要3把code,弹出来,加入用户名,你可以随机生......
  • SpringBoot集成LDAP认证登录
    Maven依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.......
  • 通过api登录接口获得cookie,给selenium使用,绕开登录页面
    1、通过接口登录获得cookiedefget_token_cookie():test=SSO_EXAMPLE()token=test.get_session.json()['token']cookie=test.get_session.cookiesreturntoken,cookietoken,cookie=get_token_cookie()print(token)cookie_value=cookie.v......
  • mysql 登录错误次数
    如果连续5次输入密码错误,限制登录数据库10分钟1.安装插件(CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS)installpluginCONNECTION_CONTROLsoname'connection_control.dll'installpluginCONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTSsoname'connection_con......
  • playwright录制功能使用绕过登录操作
    1.终端上执行下面的命令会生成一个录制页面2.在录制页面输入自己要登录的网址,输入账号密码或者有验证码的,正常的登录操作,操作成功后,会在本地目录生成一个文件保存了cookies  3.下次我们在终端命令输入直接录制的网址即可,已经跳过登录操作了 4.playwrightopen--load-st......
  • golang环境和第三方爬虫包下载安装一把成
    复制代码在CentOS7.6中命令行中全部粘贴执行,golang环境和第三方爬虫包全部安装一把成。wgethttps://golang.google.cn/dl/go1.21.4.linux-amd64.tar.gztar-zxvfgo1.21.4.linux-amd64.tar.gz-C/usr/local/cat>>.bash_profile<<"EOF"exportGOROOT=/usr/local/goexpo......
  • C++第三方库汇总
    图像处理:OpenCV矩阵运算:Eigen图像读写:stb_image,广泛应用于Graphics领域文件解析json文件解析:RapidJson,参考:https://www.geeksforgeeks.org/rapidjson-file-read-write-in-cpp/glTF文件解析:cgltf......
  • Centos7 使用yum从第三方仓库安装Python3.8
    环境:CentOSLinuxrelease7.9.2009起因:Centos7自带Python2.7.5版本。而默认的YUM安装的python3是3.6版本,遂升级到3.8版本。installPython3.8yuminstall-ycentos-release-scl#仓库注册yuminstall-yrh-python38which#安装python3.8#创建软连接ln-s/opt......