什么是单点登录? 单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分 1、登录 相比于单系统登录,sso 这个过程,也就是单点登录的原理,用下图说明 下面对上图简要描述 用户访问系统1的受保护资源,系统1发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数 sso认证中心发现用户未登录,将用户引导至登录页面 ,注意观察登录过程中的跳转url与参数 2、注销 单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁,用下面的图来说明 sso认证中心一直监听全局会话的状态,一旦全局会话销毁 sso客户端与服务端通信的过程,用下图描述 so认证中心与sso客户端通信方式有多种,这里以简单好用的httpClient为例,web service、rpc、restful api都可以 4、实现
一个用户在已经在APP端登入了,扫码网页的二维码,授权web端登录。 participant S as Server 用户->>A: 1、用户打开APP(已登入) 用户->>P: 2、用户打开浏览器 P->>S: 3、请求二维码 S->>S: 4、 code S->>S: 9、缓存登录code S->>P: 10、返回已扫码消息(username) P->>P: 11.1、展示已扫码 S->>A: 11.2 返回登录code A->>S: 12、点击确认登录 username+token+登录code 生成pc token S->>P: 13、返回pc token S->>P: 14.1、返回登录成功 P->>P: 14.2、完成登录参考https://mp.weixin.qq.com/s/dxapdiBwQfpcVeMwA9MiLQ
登录流程 密钥登录比密码登录安全,主要是因为他使用了非对称加密,登录过程中需要用到密钥对。 整个登录流程如下: 远程服务器持有公钥,当有用户进行登录,服务器就会随机生成一串字符串,然后发送给正在进行登录的用户。 整个登录的流程就是这么简单,但是在实际使用 ssh 登录中还会碰到一些小细节,这里演示一遍 ssh 远程登录来展示下这些细节问题。 经过比较公钥指纹,确认该服务器就是你要登录的服务器,输入 yes 之后就可以成功登录。整个登录流程结束。 但是我们从上面的连接流程可以看到,ssh 默认是去读取 $HOME/.ssh/id_rsa 文件作为私钥登录的。
# 1:背景
2019 年苹果推出 苹果登录(Sign in with Apple)方式,要求 2020 年 4 月之后运行在 iOS13 及以上系统的 APP 如果使用第三方或社交登录服务(如 Facebook 密钥文件格式为.p8 实际是文本文件
注意:密钥文件只能被下载一次,下载后保存在安全的地方,丢了的话只能重新申请了
# 3:登录流程 登录流程分两大块,一个是客户端部分,一个是后端部分,其中后端部分有两种校验方式 基于授权码的后端验证 、 基于JWT的算法验证 ,稍后会一一讲解。 总体流程如下图:
# 3.1 客户端侧
# 步骤一:授权
对于客户端来说 AppleID 登录与传统的三方登录流程一样,分为 调用接口 与 回调信息获取 两步,唯一不同点是苹果登录的 API 是在 iOS # 4 总结
目前使用的是基于授权码的后端验证方式,每次收到客户端登录请求后都会像苹果服务器发送 post 请求来验证,导致受网络影响较大。
wsServer.connected.send(wsClient,{"t":"sessionid","sessionid":"uuid"}} //客户端连接建立后服务器马上发送一个sessionid,询问客户端他是不是已经保存了免密登录状态 ,如果免密登录,客户端提供上次有效的sessionid和密钥。 然后检查本地是不是已经存有上次交互的sessionid,如果有,发送给服务器上次交互的sessionid和密钥,让服务器验证,从而实现免密码登录。 如果本地没有上次登录信息,就接受保存服务器发来的sessionid, if savedlastsessionid { wsClient.send(savedlastsessionid)
关于后台登录步骤的流程: 1. 后台登录控制器:RegisterController 1. GetImageValidate()方法说明: 登录页面,加载验证码(防止暴力破解)的时候,需要一个Key在服务器端保存验证码生成的数字值,这个时候在Smart1Controller控制器中 用户登录了,用户请求某些方法是否有权限的验证; 3. 对没有设置权限的方法,做直接通过验证的处理; 4. 如果用户没有登录,没有权限分别做不同的返回状态值处理返回; 3. ,则在MemberCache中,设置用户的缓存时间,和缓存键,GetKey()方 法设置缓存key;并返回用户的登录信息; 4.
一、第一次登录远程主机流程 第一次ssh到远程主机时远程主机会发送它的公钥到客户端主机,客户机确认继续连接后会把远程主机的公钥保存到.ssh/known_hosts文件,下次再连接此远程主机时会去.ssh /known_hosts查看,如果是已经保存的公钥证明是信任主机,即不会告警并直接提示输入用户名密码登录。 二、密码登录流程 远程主机收到客户端请求后会把自己的公钥发送给客户端,客户端通过公钥加密之后将密码发送给远程主机,远程主机用密钥解密,密码如果正确则登录成功。 三、公钥登录(免密登录)流程 公钥登录原理就是客户端将自己的公钥存储到远程主机的.ssh/authorized_keys中,客户端发起登录时,远程主机会发送一段随机字符串给客户端,客户端用自己的私钥加密后重新发回远程主机 ,远程主机用存储的客户端公钥解密之后对比之前发送给客户端的字符串,相同的话即认为客户机认证,不在需要输入密码直接登录系统。
如不了解jwt,请戳:程序猿DD,什么是jwt 下面我给出一个jwt实现单点登录的流程: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/143586.html原文链接
做了那么多年前端,还没做过有关于单点登录的项目,早之前我理解的单点登录是一个账号只能一个地方登录。其实单点登录我们使用的太多了。比如我们登录了淘宝相当于登录了天猫。 登录的核心无非就是把登录凭证缓存在客户端,session、cookie、localstorage,可以是前端自己注入也可以是后端注入,登录的凭证也就是各种加密解密的东西,比如JWT等。 下面是单点登录的流程,简便的一个流程: 当另一个这个企业下的平台访问的时候: 几点需要注意一下,临时凭证只能使用一次,这些凭证其实有一些专业的名词,TGT、TGC、ST等,这边没有详细解释,可以自己去查一查 有单点登录就有单点登场,单点登出就简单了,一个地方退出登录,通知自己的服务器,服务器发起请求到CAS,然后CAS清除登录的信息,并发给在这边注册过的服务器,通知退出登录了,清除所有的登录信息。 现在的第三方授权登录有点类似单点登录,这样就不需要注册很多的账号,SSO3.5版本之后也支持通过授权登录。第三方授权登录跟SSO初衷是不太一样,但是结果非常接近,也就是第三方授权登录的没有单点登出。
token based login P.S.用户名/密码属于知识因子,另外还有占有因子和遗传因子: 知识因子:用户登录时必须知道的东西都是知识因子,比如用户名、密码等 占有因子:用户登录时必须具备的东西 这种区别在单点登录(SSO,Single Sign On)的场景最为明显: 基于 Session 的 SSO:考虑如何同步 Session 和共享 Cookie。 Session 方案中,Cookie 机制让登录变得很简单(客户端几乎无感知),将用户名和密码 Post 过去,返回 200,之后就是已登录用户了 而在 Token 方案中,不一定将 Token 写入 invalidateToken(res.locals.token); res.status(200).json({ status: 'success' }); }); // 3.过期时去黑 // 4. 但需要多存/取、校验一个字段,性能相关 必要的话,这 4 种策略可以多管齐下,比如无论使用哪种策略,客户端 Token 都是理应删掉的 P.S.关于如何立即作废 JWT 的更多讨论,见: Invalidating
登录的处理流程: 1、登录页面提交用户名密码。 2、登录成功后生成token。Token相当于原来的jsessionid,字符串,可以使用uuid。 3、把用户信息保存到redis。 4、使用String类型保存Session信息。可以使用“前缀:token”为key 5、设置key的过期时间。模拟Session的过期时间。一般半个小时。 6、把token写入cookie中。 9、登录成功。
登录工作流程 当IdentityServer在授权端点收到请求,且用户没有通过认证时,用户将被重定向到配置的登录页面。 将会传递一个returnUrl参数,通知你的登录页面,一旦登录完成,用户应该被重定向到哪里。 ? 注意通过returnUrl参数的开放重定向攻击。 请参阅API的交互服务来验证returnUrl参数(https://identityserver4.readthedocs.io/en/release/reference/interactionservice.html 登录上下文 在您的登录页面上,您可能需要有关请求上下文的信息,以便自定义登录体验(如客户端,提示参数,IdP提示或其他内容)。 这可以通过交互服务上的GetAuthorizationContextAsync API获得(https://identityserver4.readthedocs.io/en/release/reference
SSO单点登录流程源码学习 应用背景 过去若是部署多台单点登录系统,会通过nginx配置做会话保持,从而保证不同客户端发起的登录请求会一直落在同一台机器,保证正常登录,nginx配置如图举例: com.octo.captcha.service.captchastore.CaptchaAndLocale; import com.octo.captcha.service.captchastore.CaptchaStore; import org.slf4j.Logger ; import org.slf4j.LoggerFactory; import org.springframework.data.redis.core.RedisTemplate; import javax.validation.constraints.Min 继续回到SSO单点登录流程上找问题,查看login-webflow.xml, 可以看到在提交登录表单验证success后应进入sendTicketGrantingTicket,同时发现在提交表单验证的 问题处理 基于上述分析,后面进行操作,修改cas-servlet.xml,在流程开始类initialFlowSetupAction中配置RedisTemplate模板 在流程开始类InitialFlowSetupAction.java
扫码登录看起来神奇,主要是因为微信 APP 扫自家的码会做一些普通二维码软件不会做的额外的操作,那就是将当前已登录的微信和扫出来的 ID 提交到微信服务器,类似的应用还有扫码支付、扫码加公众号等功能,实现流程如下 2.用户打开自己的手机微信并扫描这个二维码,并提示用户是否确认登录。 如果接到状态码201(服务器创建新资源成功),表示客户端扫描了该二维码。 3.手机上的微信是登录状态,用户点击确认登录后,手机上的微信客户端将微信账号和这个扫描得到的 ID 一起提交到服务器。 4.服务器将这个 ID 和用户 的微信号绑定在一起,并通知网页版微信,这个 ID 对应的微信号为此用户 ,网页版微信加载用户 的微信信息,至此,扫码登录全部流程完成。
因为有一点学习的需求,所以花了一天时间倒腾易班的登录流程 首先需要一台越狱了的 IOS 设备 安装易班 打开易班 ssh 连上 IOS,然后: ps -A 找到易班的应用名称 根据教程安装Clutch https://wizardforcel.gitbooks.io/ios-sec-wiki/content/chapter4/issue4-3.html 获取易班的id Clutch -i 根据id 砸壳 Clutch -d 2 把砸壳出来的ipa拉到本地,以压缩文件方式打开 找到程序,拖入 IDA 让 IDA 跑一下,然后找登录相关函数 F5 一键分析,然后就埋头看 重点看密码加密这部分
= 0){//已经有token //验证token是否过期 this.checkToken(token); } else { //没有token 进行登录操作 this.login(); } }, fail: function(err){ console.log(err) } }) }, //登录函数 login() { console.log('执行了登录') wx.login({ //code只有5分钟有效期 success: (res) => {
discuz X3登录流程分析 公司最近要将discuz论坛升级至最新版discuz X3。但是公司要用自己的通行证同步登陆。故必须要知道discuzX3的登录流程及原理,才能进行二次开发。 source/function/function_member.php discuzX3/uc_client/client.php discuzX3/uc_client/control/user.php 二、流程 (注意:流程顺序也是按照上面文件依次向下) 1、前台输入账号/email,密码登录,根据login.htm里面的form action=“xxxx”看到将数据提交到member.php中处理。 4、流入function_member.php中大约第14行userlogin()方法。 大约33行: if($isuid == 3) { if(! return array($status, $user['username'], $password, $user['email'], $merge); } 附:discuz X3用户登录
uni.login(OBJECT) 登录 H5平台登陆注意事项: 微信内嵌浏览器运行H5版时,可通过js sdk实现微信登陆,需要引入一个单独的js,详见 普通浏览器上实现微信登陆,并非开放API, OBJECT 参数说明 参数名 类型 必填 说明 平台差异说明 provider String 否 登录服务提供商,通过 uni.getProvider 获取,如果不设置则弹出登录列表选择界面 接口调用失败的回调函数 complete Function 否 接口调用结束的回调函数(调用成功、失败都会执行) success 返回参数说明 参数名 说明 authResult 登录服务商提供的登录信息 ,通过 uni.getProvider 获取 withCredentials Boolean 否 是否带上登录态信息。 临时登录凭证 code 只能使用一次 uni.getProvider(OBJECT) 获取服务供应商。仅App平台支持。
登录的实现方式有很多,比如: 账号密码登录。 手机号验证码登录。 第三方账号登录。 账号密码,以及手机号验证码登录是最常见的登录方式。验证码登录需要服务端接入发送短信息的能力。 function (err, decode) { if (err) { // token 失效或过期 } else { // token正常 } }) 然后整个登录流程就完成了 还是得看那张图: 小程序登录流程 传给服务端以后,服务端会带上appid,appsecret和这个code去请求登录凭证校验接口。 服务端根据这个token在解析出对应的用户的同时校验登录状态。 整个流程就结束了。 总结 除了日常的开发工作之外,似乎需要对背后的流程更加熟悉一些。 比如,按照上面的流程,实际上登录态的校验功能还是在开发者服务器做的一些工作。 javascript基础知识总结
以下为设计小程序内微信登录流程的几点建议: 01 在必须用到登录信息的环节引导用户登录 在用户必须登录时才引导用户登录(如:购买前需要获取会员信息,用于同步积分数据),而不是用户一进入小程序就弹窗要求用户授权 在用户对当前小程序服务还未了解时,弹框获取用户信息,会使得一部分用户点击“拒绝”按钮,影响登录转化率。 ? 02 清晰、准确地引导用户登录 在登录页面中,清晰、准确地告知用户当前操作是登录,说明获取登录信息的目的(如:用于同步会员积分数据等) ? 03 不强制用户必须使用微信登录 除微信登录外,建议开发者提供游客登录模式,保证用户在拒绝授权头像和昵称信息后仍可使用小程序。 04 设计上兼容登录弹窗 如需获取用户头像、昵称等信息,会弹出登录弹窗引导用户授权,请开发者在交互设计上兼容弹窗,避免出现多个弹窗叠加、重复提示等不好的体验。