单点登陆解决方案

嵌入式C开发必备:用Cursor规则搞定代码风格检查(附Pikachu项目实战) 本文以Pikachu开源项目为例,详细介绍了如何利用Cursor的AI代理规则系统,为嵌入式C开发项目配置一套完整的代码风格检查与规范执行方案。通过实战演示,指导开发者创建项目级规则,实现命名、格式、硬件抽象层及驱动开发的自动化规范,从而提升代码一致性、可维护性和团队协作效率。 阅读详情
 
1.            概述
单点登录是指用户在其中一个系统登录之后,用户再漫游至其他相关系统时,不需要重复的登录。真正使用户感觉到“一点登录、全网通行”。
该实现方式 , 我们采用了目前比较流行的COOKIE认证的方式。其实现示意图如下:
统一验证由用户首次登陆Web页面时向用户浏览器写一个包含用户账号,用户Token的Cookie信息。并且由应用服务器取得这个信息以后提交到验证服务器数据库中进行注册判断。
如果用户信息注册成功,则在应用服务器上面以Session形式记录下此用户己经正确登陆的信息,以后用户再次登录些应用服务器的时候只要对此Session信息进行判断,如果Session信息存在并且是表示用户正确登陆,则用户通过验证,不需要第二次输入用户名和密码。若Session信息消失,则应用服务器提取用户浏览器中的Cookie信息再次到验证服务器上进行验证,通过验证以后再次在应用服务器端用Session信息将用户信息保存。
如果用户在应用服务器端跳转的话,每跳转到一个新的应用服务器,则应用服务器必须取得用户浏览器端的Cookie信息到验证服务器上进行一次验证,验证通过以后则同样注,Session信息在应用服务器上,以完成对用户验证的通过。
单点认证由用户首次登陆Web页面时向用户浏览器写内存Cookie,目前暂定为(userToken、loginId),同时,为了保证Cookie访问的安全性,需要把Cookie的domain设成统一的domain,只有在访问同一domain的网站才能获取该Cookie。
注:Cookie信息可以根据应用的需要,增加一些公共的字段值,以显示给用户。
3.1.    统一登录流程
验证流程如下:
(2)      对于任何一台Web服务器,都是通过以下方法来验证用户身份:
a)              判断Session是否存在,如果存在,则认为验证通过。则b)
b)              如果Session不存在:
I.           判断Cookie信息是否存在,如果都不存在,则(c)
II.       如果Cookie信息存在,则读取Cookie值,根据Cookie值loginId查询中心数据库中对应的密码,并计算userToken的Token值,比较算出的Token值和取出的值是否相等,如果相等则写loginId和userToken的Session值,并让用户通过。否则(c)
c)              转到登录页,让用户输入用户名、密码进行验证,验证通过后,写userToken和loginId的Session值及userToken和loginId的Cookie值。
用户退出登录时,把userToken和loginId的Session值及userToken和loginId的Cookie值清空。
4.             安全性分析
用户的帐号和密码以md5加密的形式保存在Cookie中,而且加入了key,用户难以破解。即便用户可以破解出Cookie值,也只能够根据userName来穷举用户密码和key,而且还要进行加密运算,难度很大,代价昂贵;
用户不可能伪造token值,因为token为加密运算(MD5加密产生32位的数);
用户把浏览器关掉以后,Cookie自动失效,并且是以非文本形式存在,这一点来讲也是比较安全。
登陆信息的传递都是通过Cookie以密文的方式,拦截几乎无可能。
 
 
 
5.            第三方接口实现
5.1.    统一认证接口
统一认证平台提供统一认证的WebService接口服务,具体如下说明:
 
该WebService需要客户端的API 鉴权,访问WebService时请添加用户名和密码。用户名:cnlife 密码:cnlife#^%365
 
l        认证接口
User authenticate(String loginId, String password);
认证通过,返回一个User对象,否则返回null。
 
l        查询基本信息接口
User getUserBaseInfoByLoginId(String loginId);
根据用户的登陆帐号,获取用户的基本信息。查询成功,返回一个User对象,否则返回null。
 
返回的User是标准的Java Bean。定义如下:
User(userId,loginId,password,msisdn,nickName,email,gender)
用户ID    userId     String
登陆帐号 loginId    String
登陆密码 password   String
手机号码 msisdn     String
昵称      nickName   String
电子邮件 email      String
性别      gender     String(1为男,0为女)
 
5.2.    登陆认证流程说明
验证过程说明:用户首次通过Web登陆时,根据登陆帐号和密码在统一平台进行认证,认证通过可获取用户的基本信息。
认证通过后,为了满足SSO的“单点登陆,全网通行”,需要进行一系列的处理,具体过程如下:
1、 计算token
2、 将loginId和计算出来的tokern置入cookie
// token loginId 设置入 cookie .
Cookie aCookie;
 
// token
aCookie = new Cookie(“cnlifeUserToken”, userToken);
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
loginId = new String(loginId.getBytes("GBK"), "ISO8859_1");
aCookie = new Cookie(“cnlifeUserId”, URLEncoder.encode(loginId, "iso-8859-1"));
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
完成登陆认证。
 
注:如果是JAVA技术实现的系统,我们将提供API协助完成该操作。
5.3.    漫游登陆流程说明
当用户从A系统漫游到B系统时,B系统需要做以下操作:
1 、判断用户在B系统是否存在Session信息,如果存在,用户处于登陆状态,无需再进行以下操作。
2 、判断对应的Cookie是否存在
Cookie[] userCookie = request.getCookies();
 
if (userCookie != null)
{
      int cookieLen = userCookie.length;
      for (int i = 0; i < cookieLen; i++)
      {
             String cookieKey = userCookie[i].getName();
             mLogger.info("Cookie Key : " + cookieKey);
             if (cookieKey != null && cookieKey.equalsIgnoreCase(“cnlifeUserToken”))
             {
                    cnlifeUserToken = userCookie[i].getValue();
             }
             if (cookieKey != null && cookieKey.equalsIgnoreCase(“cnlifeUserId”))
             {
                    cnlifeLoginid = URLDecoder.decode(userCookie[i].getValue().toString(), "iso-8859-1");
             }
      }
}
cnlifeLoginid = new String(cnlifeLoginid.getBytes("ISO8859_1"), "GBK");
 
3 、如果Cookie不存在,直接到登陆页面
4 、如果Cookie存在,使用Cookie中的登陆帐号,到统一认证平台获取用户的基本信息。根据加密规则对用户的基本信息进行计算,获得Token。对这个Token和Cookie中的Token进行比较,如果符合,用户登陆成功。
 
5.4.    用户退出登陆
用户退出登陆的时候,除了清除本系统的相关Session信息,还需要对相关Cookie进行清除。
Cookie aCookie;
aCookie = new Cookie(“cnlifeUserToken”, "");
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
aCookie = new Cookie(“cnlifeUserId” "");
aCookie.setMaxAge(-1);
aCookie.setDomain(“cnlife365.com”);
aCookie.setPath("/");
response.addCookie(aCookie);
 
 
Unity XR Interaction Toolkit(二)手柄交互 XR Interaction 手柄事件和抓取设置 阅读详情

相关推荐

CTF实战:Flask Session流量解密与内存马路由追踪

本文通过一道CTF实战题目,详细解析了Flask Session流量解密与内存马路由追踪的全过程。文章从破解前端加密密码入手,逐步揭示如何利用泄露的SECRET_KEY解密Session,发现命令执行痕迹,并最终追踪到攻击者植入的内存马路由。内容涵盖Wireshark流量分析、flask-unsign工具使用等实战技巧,为CTF选手和安全研究人员提供了一套完整的Flask应用安全分析思路。

weixin_28309571的博客 285

CAS 3.4 单点退出详细配置(Configuring Single Sign Out )

CAS3.4版本已经很好的支持了单点注销功能,效果是非常的棒,配置是相当的简单。 之前版本因为在CAS服务器通过HttpClient发送消息时并未指定为POST方式,所以在CAS客户端的注销Filter中没有收到POST请求也就没有做session销毁处理。     现在的版本只要按照官网的说明正确配置即可。 假设环境如下:   两个业务系统APP1和APP2 在没有配置单点退出时...

Jcbay的专栏 760

腾讯Android开发面试指南与参考答案

腾讯深圳元宝高级Android开发工程师岗位要求3-5年Android开发经验,熟悉Kotlin和性能优化,具备架构设计能力。岗位职责包括元宝Android客户端研发、稳定性优化及跨团队协作。面试重点考察Kotlin、Jetpack Compose、多线程编程等核心技术,3轮线上面试流程较快。无AI项目经验也可应聘,需突出展示Android架构设计、性能调优等实战能力。建议准备Compose开发、算法等加分项案例。

郑伟强dev的专栏 1087

[OIDC in Action] 1. 基于OIDC(OpenID Connect)的SSO

在[认证授权]系列博客中,分别对OAuth2和OIDC在理论概念方面进行了解释说明,其间虽然我有写过一个完整的示例(https://github.com/linianhui/oidc.example),但是却没有在实践方面做出过解释。在这里新开一个系列博客,来解释其各种同的应用场景。因为OIDC是在OAuth2之上的协议,所以这其中也会包含OAuth2的一些内容。 OIDC协议本身有很多的开源...

weixin_34240657的博客 694

OAuth及OIDC技术分享PPT杂记

本文为整理OAuth2.0 & OIDC1.0分享PPT过程的准备材料,有些杂,感兴趣的小伙伴可以挑感兴趣的章节看,整个文章脉络亦展示了作者对认证、OAuth2.0、OIDC1.0的整个认知过程。

罗小爬的技术宝书 2917

单点登录和单点退出

单点登录和单点退出

小汁的博客 1138

基于OIDC实现单点登录SSO、第三方登录

OIDC联合身份认证机制背景概念1 OIDC身份认证协议2 基于OIDC实现SSO2.1 统一登录2.1.1 流程2.1.2 RP相关接口2.1.3 OP相关接口2.2 统一登出2.2.1 流程2.2.2 RP需要在向OP注册时提供2.2.3 RP相关接口2.2.4 OP相关接口2.3 持续监视2.3.1 流程2.3.2 RP相关接口2.3.3 OP相关接口3 在OIDC的SSO中集成第三方登录(...

u012324798的博客 1万+

单点登陆跨域解决方案

=单点登陆跨域解决方案 方案1: 前端: <html> <head> <script src="http://libs.baidu.com/jquery/1.7.2/jquery.min.js"></script> </head> <body> <h3 id="test...

xiaogg3678的专栏 1036

php版单点登陆实现方案,[php单点登录解决方案]纯基于PHP的单点登陆

篇一 : 纯基于PHP的单点登陆【引自纯月的博客】Discuz有一个通行证,类似于单点登陆过我觉得单点登陆最好应该是一个独立的程序,和CAS一样。由于所有的程序都是PHP的,所以就做了一个简单的单点登陆。借用了一下discuz的加密方法。用户有以下几种情况会直接访问本系统:1、用户直接访问passport,希望登陆2、用户从passport_app上点击登陆按钮转过来的3、用户从passpor...

weixin_33922644的博客 611

一个单点登陆(SSO)解决方案

一个单点登陆(SSO)解决方案2007-04-2909:18:28标签:单点登陆方案SSO[推送到技术圈]从网上收集的一个关于单点登陆(SSO)的解决方案~单点登录(SingleSignOn),简称为SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射...

129

网站用户单点登陆解决方案

  来源:http://bbs.ad0.cn/viewthread.php?tid=3181、用户访问应用系统。图 3.3 用户单点登录流程 - 步骤一2、应用系统如果检查到用户没有在自己的服务器登录,则将用户请求重定向到单点登录服务器上。(使用重定向就可以处理各服务器跨域的情况)图 3.4 用户单点登录流程 - 步骤二3、单点登录服务器检查到用

Danny Dong的专栏 827

单点登陆解决方案

 新增登出流程图 2008-02-02上面是整体流程图,这个SSO组件在安全上有了很充分的考虑,可以说是非常安全,那么下面看看登录请求数据的格式,和为何它能保证真实性和完整性这样,当数据在传输过程中,如果站点编号,用户编号,请求号任意一项做任何的修改,当认证中心接收到数据之后,均无法与签名信息进行匹配。凡是认证中心能验证通过的请求均为合法的,真实的,完整的请求信息。登录答复的格式如下图所示因为登录

我为代码疯狂 911

单点登陆的两种解决方案

1:redis+cookie 登录的处理流程: 登录页面提交用户名密码。 登录成功后生成tokenToken相当于原来的jsessionid,字符串,可以使用uuid。 把用户信息保存到redis。Key就是token,value就是User对象转换成json。 使用String类型保存Session信息。可以使用“前缀:token”为key 设置key的过期时间。模拟Sessi...

夜长梦多 446

单点登陆解决方案

  更新:新增登录流程图:[原创]单点登陆(SSO)组件的设计与实现二-登录流程图      先说几句废话,自我感觉此方案还错,至少解决了安全性的问题,也实现了统一登出,能跨平台,跨服务期,跨域名,当然需要相应的联盟站点的支持,但从原理上绝对能跨平台。设计和具体实现的描述比较长,今天先介绍一部分 1引言 1.1 编写目的 详细说明单点登录组件(SSO)的设计思想和实现方法,是日后

我为代码疯狂 1449

单点登陆最简单解决方案

服务器A:网站A服务器B:网站B服务器C:验证网站(验证表中有UID和KEY两个字段)。1.       用户打开网站A的页面http://服务器A/a.aspx,检测发现网站Session中没有存储用户名UID。2.       系统转到验证服务器登录页面,并在QUERYSTRING中附加前一个页面的URL地址。比如http://服务器C/login.asp?URL=http:/

kagar的专栏 994

单点登陆解决方案以及代码分析与实现

1.什么是单点登陆 同一家公司同应用使用同一套登陆系统叫做单点登陆系统2.单点登陆的引出 比如QQ号可以登陆很多游戏,而且这些游戏都是腾讯公司的,所以再开发新的登陆模块,QQ就可以登陆多个应用.在写的过程中,我们注重用户体验,考虑用户体验的时候我们的用户名和密码的判断都是很精准的。没有用户名或者密码字样的出现。3.代码实现/** * 登陆 * @param username 帐号

ZhuPengWei_ 385

支持多域的单点登陆解决方案

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可 以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。 当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进 行登录;根据用户提供的登录信息,认证系统进行身份效验,...

sunct的博客 274

VMAX存储运维操作手册.docx

VMAX存储运维操作手册.docx

Python编程期末模拟卷(含参考答案)

一份Python编程进阶模拟卷,内容涵盖Python面向对象、Python文件操作、Python绘图库Turtle、Python数据分析、Python数据可视化、Python网络爬虫等,题型包括选择题、填空题、程序分析题、编程题。方便学生课后自测和老师出题参考。

上一篇: JAVA加密程序
下一篇: session监听
dnvdnv
博客等级 码龄19年 4粉丝 28原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值