CAS单点登录-第三方登录[QQ、微信、CSDN、GitHub](十四)
CAS单点登录-第三方登录[QQ、微信、CSDN、GitHub](十四)
注: 目前博文使用cas版本为5.1.5,由于5.2.x与5.1.x构建模式有差异,所以部分配置会有些偏差。
本章内容
- 简答介绍OAuth2
- 微信登陆
- CSDN登陆
- GitHub登陆
- QQ登陆
#介绍
很多朋友问我,怎么集成QQ、微信、CSDN、GitHub、微博
等等第三方登录,所以我也只要简单列一下如何集成第三方登录,当然这次做的demo只做测试教程使用,上线还需要界面的调整以及第三方登录的审核
。
目前用的第三方登录几乎都是采用授权的OAuth2协议(有必要了解)
简单来说就是,客户端请求第三方服务,用户在第三方服务登录成功,第三方服务给客户端token,最后客户端采用token可以获取第三方提供的接口
#实战
添加依赖
<dependency><groupId>org.apereo.cas</groupId><artifactId>cas-server-support-pac4j-webflow</artifactId><version>${cas.version}</version></dependency>
做了相关配置,会有Pac4j相关的debug信息:
CSDN授权登陆
创建应用
登录csdn并且创建应用,我要打开具体地址
创建应用具体如下:
接口信息
我要查看CSDN官方文档
授权接口
由上图可知:
- 授权路径为:
http://api.csdn.net/oauth2/authorize
- appid参数名为:
client_id
(有些开放平台为app_id、appId等等刚好cas配置的appid的参数名为client_id,若不是需要做调整)
access_token接口
由上图可知:
- token路径为:
http://api.csdn.net/oauth2/access_token
- secret参数名为:
client_secret
(有些开放平台为secret等等刚好cas配置的secret的参数名为client_secret,若不是需要做调整)
用户信息接口
我要查看API文档
非常的明显,用户信息接口为:http://api.csdn.net/user/getinfo
该json数据为csdn用户数据的报文数据,具体文档点击
{"username":"u010475041","job":"java程序员","workyear":"","website":"","description":"喜欢研究新技术,对大数据处理、系统架构、高并发、支付金融类系统非常感兴趣。平时喜欢旅游、音乐。"}
到此CSDN的授权登录所具备的信息基本获取了
SSO配置
application.properties
#CSDN OAuth Login
#appid
cas.authn.pac4j.oauth2[0].id=1100557
#分配秘钥
cas.authn.pac4j.oauth2[0].secret=3687d9d2e9e44bc0b48847d541449c14
#授权接口
cas.authn.pac4j.oauth2[0].authUrl=http://api.csdn.net/oauth2/authorize
#token获取接口
cas.authn.pac4j.oauth2[0].tokenUrl=http://api.csdn.net/oauth2/access_token
#用户信息接口
cas.authn.pac4j.oauth2[0].profileUrl=http://api.csdn.net/user/getinfo
cas.authn.pac4j.oauth2[0].profileAttrs.id=username
cas.authn.pac4j.oauth2[0].clientName=CSDN
打开登录页结果如下:
看到如下,恭喜你~
GitHub授权登录
而GitHub的授权登录就更为简单了,举一反三~
为什么说简单呢,因为cas为我们准备好了接口信息,不用我们去找了,也就是说,到github申请appid以及获取秘钥即可,哈哈哈哈~
创建应用
点击打开创建应用
当然啦,创建成功会给我们分配秘钥的
SSO配置
这些就不多说啦~
application.properties
#GitHub OAuth Login
cas.authn.pac4j.github.id=b5f93226ece4b6dcb71b
cas.authn.pac4j.github.secret=34a319d36e5d3bead3c242ffb5172d49511b48fe
cas.authn.pac4j.github.profileAttrs.id=id
cas.authn.pac4j.github.client-name=github
马上重启试试~
再次恭喜你~
微信授权登录
重头戏,这个就稍微跟前面的有点不一样了~
创建应用
授权到测试公众号平台申请测试号,当然有正式的更好。。。
其实我们就是要这个效果。。。
我们登录了,测试平台就默认给我们创建了一个应用~
设置回调域名
接口信息
我要打开微信扫描登录文档
授权接口
由上图得知:
- 授权路径为:
https://open.weixin.qq.com/connect/qrconnect
- appid参数为:
appid
cas默认为client_id,需要做调整 - 网页授权登录
scope=snsapi_login
需要做调整
access_token接口
由上图得知:
- access_token路径为:
https://api.weixin.qq.com/sns/oauth2/access_token
- appid参数为:
appid
cas默认为client_id,需要做调整 - secret参数为:
secret
cas默认为client_secret
,需要做调整
经过源码com.github.scribejava.core.oauth.OAuth20Service#createAccessTokenRequest
的分析
很可惜不符合pac4j的默认请求,那么有以下几个解决办法:
- 添加一个中转程序,把access_token路径让中转程序接管,中转程序请求到微信,再返回给sso程序即可(推荐)
- 修改cas以及pac4j源码,添加自己的部分逻辑(不推荐)
用户信息接口
由上图得知:
- 用户信息接口为
https://api.weixin.qq.com/sns/userinfo
SSO配置
application.properties
#WeChat OAuth Login
cas.authn.pac4j.oauth2[1].id=wxac0f1c863937d067
#由于微信的不为clinet_id,为appid
cas.authn.pac4j.oauth2[1].customParams.appid=wxac0f1c863937d067
#微信scope登录为snsapi_login
cas.authn.pac4j.oauth2[1].customParams.scope=snsapi_login
cas.authn.pac4j.oauth2[1].secret=bfeedc350fe15f45315a0ab67643085e
cas.authn.pac4j.oauth2[1].authUrl=https://open.weixin.qq.com/connect/qrconnect
cas.authn.pac4j.oauth2[1].tokenUrl=https://api.weixin.qq.com/sns/oauth2/access_token
cas.authn.pac4j.oauth2[1].profileUrl=https://api.weixin.qq.com/sns/userinfo
cas.authn.pac4j.oauth2[1].clientName=WeChat
哎呀,对不起大家,
- 获取不到能够成功测试的应用,非常抱歉
- 没有测试到access_token,非常抱歉
- 没有提取到用户信息,非常抱歉
QQ授权登录
申请成为开发者
接入文档
qq登录更奇葩,恐怕在cas中做的话就比较吃力了,除非cas开放了自定义OAuth2的配置定义
奇葩1: 开发者审核需要拍照上传。。。
奇葩2: 用户信息返回jsonp
(解决办法,通过中转程序来做这个用户信息的适配)
奇葩3: access_token获取报文不是json
创建应用
SSO配置
#QQ OAuth Login
#QQ OAuth Login
cas.authn.pac4j.oauth2[2].id=101433938
cas.authn.pac4j.oauth2[2].secret=ad4fef7e3fb785a51026aaf78121eff0
cas.authn.pac4j.oauth2[2].authUrl=https://graph.qq.com/oauth2.0/authorize
#原路径
#cas.authn.pac4j.oauth2[2].tokenUrl=https://graph.qq.com/oauth2.0/token
#由于返回非json,做代理转发
cas.authn.pac4j.oauth2[2].tokenUrl=http://localhost:8808/token/qq
#原路径
#cas.authn.pac4j.oauth2[2].profileUrl=https://api.weixin.qq.com/sns/userinfo
#中转帮忙做这个jsonp的转发动作,具体看sso-client-demo/sso-client-proxy-demo模块
cas.authn.pac4j.oauth2[2].profileUrl=http://localhost:8808/user/qq
cas.authn.pac4j.oauth2[2].profileAttrs.id=openid
cas.authn.pac4j.oauth2[2].profileAttrs.client_id=client_id
温馨提示
OAuth2的参数标准:
测试成功:
- CSDN授权登录
- GitHub授权登录
- QQ授权登录
启动模块
- sso-config-server
- cas-client-demo
- cas-proxy-demo
- sso-server
测试
测试时发访问http://localhost:8080/sample
注意要点
- 微信、QQ第三方登录与标准的OAuth2有些差异,需要进行调整
- 测试时需要启动以上所有模块,也可以采用根目录build.cmd run启动所有服务进行测试
- 以上仅仅做学习记录参考,在生产用程序需要更加严谨
下载代码尝试:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qYObMI3F-1611805635516)(https://img.shields.io/badge/downloads-v1.6.0_RC2-brightgreen.svg)] 其他版本可以到GitHub或者码云查看
发现一些意外的事情可以考虑翻翻前面的博客进行学习哦
作者联系方式
如果技术的交流或者疑问可以联系或者提出issue。
邮箱:huang.wenbin@foxmail.com
QQ: 756884434 (请注明:SSO-CSDN)
CAS单点登录-第三方登录[QQ、微信、CSDN、GitHub](十四)相关推荐
- 集成友盟第三方实现QQ微信登录遇到的坑
最近项目集成友盟第三方实现QQ微信登录,在集成实现过程中遇到了一些问题,也对这些问题提出一些自己的解决办法: 集成的过程不就提了,直接上问题: 一.微信登录提示"授权失败,请查看log&qu ...
- 安卓三方登录趟坑,QQ,微信,微博,Twitter,Facebook,Instagram
前言 最近给app加入三方登录,由于比较多,所以就用的友盟统一登录,会比一个一个配置方便点 正文 先说QQ,微信,微博: 国内QQ,微信,微博三方登录其实还行,并没有太多坑,文档也挺完善的. 但是需要 ...
- 微信登录/第三方登录
微信登录 1.二维码 2.授权成功 3.题外 4.本篇用到的发送get请求的工具类 微信登录官网: https://developers.weixin.qq.com/doc/oplatform/Web ...
- 【QQ登录------第三方登录的实现流程】
QQ互联:https://wiki.connect.qq.com/%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C_oauth2-0 大致逻辑: 有一个网站,且已备案.网站需要 ...
- 登录超方便 QQ/微信/Google快捷登录API功能上线啦
作为一项必不可少的操作,现有登录方式的门槛并不低,甚至存在一些不可调和的矛盾:我们需要记住越来越健忘的所有账户和密码.我们需要等待并输入帐户密码,以提高效率,然后才能完成登录.我们需要面对明露的风险, ...
- 业务复习-微信登录/第三方登录实现
技术点:HttpClient(模拟浏览器的请求),Json转换工具 第一步:密钥ID的配置 wx.open.app_id=wxed9954c01bb89b47wx.open.app_secret=a7 ...
- SpringSecurity+Oauth+短信登录+第三方登录认证+Session管理
目录: 零.前言 一.SpringSecurity 简介 二.标准登录 三.用户认证代码实现 零.前言 在开始本文之前,底层这块已经有了很大的调整,主要是SpringBoot由之前的 1.5.9.RE ...
- 单点登录与第三方登录 + CSRF-XSS-DNS-DDOS-SQL攻击
背景 在系统开发初期,系统很少,每个系统都有自己的登录模块,用户直接使用自己的账号进行登录即可. 但当功能不断完善,为了合理利用资源并降低耦合性,往往需要将单系统拆分为多个子系统. 以阿里系的网站为例 ...
- 微信第三方登录 -- (PC端+移动端)
微信第三方登录 -- (PC端+移动端) 一.前言 一. 什么是第三方登录 所谓的第三方登录,是说基于用户在第三方平台上已有的账号和密码来快速完成己方应用的登录或者注册的功能.而这里的第三方平台,一般 ...
最新文章
- 读《Oracle DBA工作笔记》知识点-获取创建语句
- 什么是SCRUM敏捷开发
- Python如何读取文件
- 强连通分量(学习心得)
- 软件测试之黑盒测试-等价类划分法
- MedMNIST:上海交大发布医学影像领域的MNIST(附下载)
- JavaScript汉字Unicode编码相互转换
- 网易如何做新闻推荐:深度学习排序系统及模型
- Mybatis无法获取带有下划线前缀的字段的值
- 油猴插件官网下载及Userscript+安装教程
- 原来iPhone手机还能自动清理垃圾!简单几步,就能多出几个G内存
- windows驱动开发——使用sys文件
- provisional headers are shown解决办法
- python乘法口诀表打印
- Problem K: 三角形数
- 很多程序员编码时都戴耳机,到底在听什么?
- 机械硬盘提示格式化的常见原因|3种数据恢复方法
- 如何在远程工作中保持企业文化的凝聚力
- 【Onedrive】查看和使用组共享链接
- FastFCN: Rethinking Dilated Convolution in the Backbone for Semantic Segmentation
热门文章
- Unicode字符集下CString与char *转换 (解决中文乱码等)(转)
- Java毕设项目小区停车场管理系统(java+VUE+Mybatis+Maven+Mysql)
- 临床药物对大鼠的长期毒性实验
- android sdk下载地址
- 使用MATLAB来可视化三维点云上的法向量
- linux的shell脚本报错“syntax error near unexpected token `”的解决
- JDBC当中三个对象的理解
- [统计]_通俗地讲一类错误和二类错误
- 在滴滴和头条2年,我的总结与感悟
- python课程报告论文包含代码数据_归纳与总结一:Requests的使用