C#实现单点登录难不难

heyangbin 2010-10-24 02:28:12
现在有个系统,出于安全考虑,客户要求一定要采用单点登录,我想问一下C#实现单点登录难不难,有无现成的开源框架或者代码,虽然剩下分数不多,100分奖赏。
...全文
1418 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yubin0319 2012-10-22
  • 打赏
  • 举报
回复
sp1234说的不错,我给你提供一种方法,用户首次登录,服务器分配一个唯一的标识给用户记录并存入数据库,服务器写个作业控制下,每隔60秒删除超时的用户登录记录,用户在访问页面时用js把这个标识每隔60秒发送给服务器,服务器剩余时间加60秒。这样可以防止用户不正常关闭之后造成的锁号问题。程序设计难点:1.如何分配唯一的标识 2.多个页面js一起发送给页面如何做到60秒内只发送一个。 解决这两个问题,你就实现咯。
如果是多个站点,无非就是数据库再复杂点,原理还是这样的原理。
希望对你有用~~~
dazix 2012-09-01
  • 打赏
  • 举报
回复
看看看阿卡看
asdfI 2012-03-10
  • 打赏
  • 举报
回复
虽然是为了易用但还是得考虑安全性。。。
asdfI 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 yzxdc 的回复:]

所谓的单点登陆是服务端的事情吧,也就是说除了通常的用户名密码登陆外,服务端还支持一个sessionID登陆的方式,然后客户端要做的就是把登陆获得的sessionID保存在一个跨进程可以访问的地方即可
[/Quote]
sessionID不是服务器跟据每次登录的自动分配的么
chinesegirl_007 2011-06-13
  • 打赏
  • 举报
回复
很不错
机器人 2010-10-25
  • 打赏
  • 举报
回复
就一个应用来说,不算是单点登录。

多个应用,利用统一的登录界面,统一的用户ID,才能算是单点登录。

主流技术:MS的Passport 现在叫 windowslive
还有开源的OpenID
gohappy2008 2010-10-25
  • 打赏
  • 举报
回复
关注正解!!!
deyygywxf 2010-10-25
  • 打赏
  • 举报
回复
严格地说,这不叫单点登录。单点登录是指允许多个应用程序相互共享登录信息(而不用多次出现登录界面)。而你的需求只能叫做限制同一地点登录。

不过这个地点是何意义,其实做大程序的人需要先写文档说明什么是“同一地点”概念,然后才能实现。



随便说一种方式:

对于你只有一个客户端应用程序的网络系统,那么就可以让应用程序登录时向服务器注册一个随机产生的编号,然后服务器把此用户最后使用的编号(比如叫做 PassportID)写入用户信息。当用户再次登录时,如果此编号已经分配了,既不是默认值0,那么就说明正在其它应用程序会话上登录着,还没有注销。

当然配套地就需要让应用程序结束时可以自动去把用户的这个信息改为0,或者用一个定时的守护程序去判断用户应用程序有没有掉线,如果离线了则帮助把这个信息改为0。
deyygywxf 2010-10-25
  • 打赏
  • 举报
回复
如果主域名相同,采用基于表单验证的Cookie就可以了
shbz1986 2010-10-25
  • 打赏
  • 举报
回复
单点登录到底是什么,等待高手指点
porschev 2010-10-25
  • 打赏
  • 举报
回复
看看。。。。
最后一只恐龙 2010-10-25
  • 打赏
  • 举报
回复
单点登录解决的不是安全性问题,而是易用性的问题,也就是在不同程序间切换时,不必在重新输入用户名密码。
(1)对于C/S结构程序,实现的方法虽然比较多,但没有很简单的方法。一个最简单的是改造Main函数,让其接受参数,如果没有参数,就弹出登录对话框,如果输入了参数,而且恰好是用户名密码,验证通过后就跳过弹出登录对话框的代码,直接进入主程序。一个程序切换到另一个程序时,通过参数传送完成。
(2)对于B/S结构程序,实现起来比较简单,因为页面可以从URL传送参数,调用另一个应用程序时直接参数形式传进去判断是否还需要登录就可以了。但需要注意两点:(i)密码必须加密,可以使用DES之类的,.net有现成的类。(ii)要防止其它用户直接把URL从地址栏复制下来,拷贝到别的地方,这样以后就不知道密码也能登录别人的系统了。可以加上调用时间,时间也加密,接收端判断如果这个URL的调用是20s(这么长时间足够了)前的,就直接失效。
yzxdc 2010-10-25
  • 打赏
  • 举报
回复
所谓的单点登陆是服务端的事情吧,也就是说除了通常的用户名密码登陆外,服务端还支持一个sessionID登陆的方式,然后客户端要做的就是把登陆获得的sessionID保存在一个跨进程可以访问的地方即可
matezy 2010-10-25
  • 打赏
  • 举报
回复
留个记号,学到再返回来看
yasha99 2010-10-25
  • 打赏
  • 举报
回复
呵呵 不错
aofengdaxia 2010-10-24
  • 打赏
  • 举报
回复
可以理解成一次登录多站点(多程序)使用不?
我以前做过类似的。我们叫做一站通行证。我使用了一个口令牌,登录的时候,生成一个随机数值。然后每个程序需要登录的时候,只需要把这串字符配合用户ID或者用户名传入后台进行验证即可。
int64 2010-10-24
  • 打赏
  • 举报
回复
单点登录:就是把多个有登录的互不相干的系统放在一起登录,一次登录解决所有系统登录问题。

laj0600310219 2010-10-24
  • 打赏
  • 举报
回复
你说的单点登录是指什么意思了?是不是一台计算机上,只能运行一个你的程序的实例?
  • 打赏
  • 举报
回复
使用PassportID是我能想出的“底线”,只要这样才有一点点灵活性可言,而用定性的一个bool值是无法处理稍微复杂一点的需求变动的。
  • 打赏
  • 举报
回复
实际的大的、有一段历史的、集成的软件系统,同一用户绝非同一时刻只绑定到一个应用程序会话上。这个“地点”概念要根据业务来仔细设计,将来也肯定需要灵活地调整。
加载更多回复(6)

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧