OpenID与传统Email用户身份认证模式整合时的安全问题和解决方法
2008-08-22 10:38
603 查看
1. Brief
在上一篇学习OpenID文章中已经给出了我对OpenID的理解,这段时间一直在思考如何把OpendID与传统Email网络用户身份验证模式进行整合,但是在进行深入分析和设计时我发现有一个潜在的安全问题。我们现有的很多项目完全是按照email address作为用户账号的key,所以如果我们要支持OpenID,就需要建立OpenID URL与email address之间的对照关系,但是如果我们仅仅简单绑定它们并不做任何确认操作(完全信任OpenID Provider给出的用户资料),我们就可能泄露用户的资料给他人,具体细节请看第二部分,而第三部分则是我给出的解决方案。
2. Problem Description
首先让我们来简单描述一次用户用OpenID进行登录过程(以SME Center网站为例),请注意第7步:1) 用户A在SME Center上选择用OpenID登录;
2) SME Center重定向到Authentication OpenID登录页面;
3) 用户A输入他的OpenID URL;
4) Authentication分析OpenID URL并重定向到用户指定的OpenID Provider登录页面;
5) 用户A在OpenID Provider登录页面输入password,登录并允许Authentication认证请求;
6) OpenID Provider响应Authentication的认证请求,并告诉Authentication用户A的OpenID URL是合法的;
7) Authentication从OpenID Provider取得用户A的资料,其中包括email address[/b], 同时建立用户A的OpenID URL[/b]与email address[/b]之间的对照关系;
8) Authentication重定向打开SME Center主页面;
9) SME Center从Authentication中取得email address作为key[/b],显示与该email address所对应的资料;
从上面的登录过程的第7步,可发现我们需要从OpenID Provider中取得用户配置的email address作为我们项目的账号key(现有的项目都是以email address为账号key, OpenID类账号必须提供email address才能与现有项目兼容),但是在OpenID Provider上的email address是用户自由填写的(在OpenID 1.1/2.0协议中并没有任何规定要求验证用户是否拥有他/她输入的email address),因此这个email address是不可信任的(有如我们要求用户填写full name一样,其内容是不可信的),用户A完全可以在OpenID Provider上输入用户B的email address(用户B的email address已在Labs项目中注册),登录并盗取Labs项目中用户B的资料,这是一个非常严重的安全问题。
3. Our Solution
经过多次分析和讨论,我们觉得在用户第一次用OpenID URL进行登录时,Authentication并不会直接打开SME Center主页面,而是给用户的邮箱发送一份确认邮件,当且仅当用户在邮箱中确认他/她拥有这个email address后,Authentication才会建立OpenID URL和该email address的绑定关系,也就是说用户只有首先确认过邮件后才能用OpenID URL进行正常登录;这个解决方法比较传统,并违背了OpenID的无须在每个网站上重复注册这个理想,但目前我们还没有找出其他更好的解决方法来保证OpenID Provider提供的Email地址是可信任的。
相关文章推荐
- 【SQL 问题】SQL2008 SQL Server身份认证方式登录失败(错误18456)解决方法图解
- Dr. Com 用户认证程序 "其它程序占用控制端口, 请退出重新再试!(1)" 问题的一种解决方法
- 安装Sql Server 2008,遇到的无权限创建数据库、修改身份验证模式等问题的原因及解决方法
- SQLServer 数据库变成单个用户后无法访问问题的解决方法[在手动还原该数据库的时候,设置为单用户模式,然后其他用户访问的时候就。。。。]
- Linux下tomcat作为守护进程运行(开机启动、以指定的用户运行、解决非root身份不能绑定1024以下端口的问题)的配置方法
- oracle11g用户登录时被锁定问题的解决方法 (ora-28000 the account is locked)
- 讲解数据库孤立用户和对象名无效问题的解决方法(转载)
- FreeRADIUS整合微软活动目录做身份验证时报错“winbind client not authorized to use winbindd_pam_auth_crap”的解决方法
- SQLServer 数据库变成单个用户后无法访问问题的解决方法
- iphone 进入安全模式 怎么解决?exit safe mode解决方法
- (转)asp.net能实现身份认证的EMAIL发送方法
- Win8如何解决打补丁后出现黑屏且无法进入安全模式的问题
- jacob下载问题, Office word 此文件正由另一应用程序或用户使用的解决方法
- PHP开发中常见的安全问题详解和解决方法
- Asp.net_解决vs运行报在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题的bug方法
- Struts2下的用户权限验证问题解决方法
- 蛙蛙推荐:一套.net窗体身份验证方案(解决了防止用户重复登陆,session超时等问题)
- Ubuntu获得根用户权限时su认证失败的解决方法
- GDAL C#版本 "安全透明方法"问题解决方案
- jsp页面360浏览器兼容模式不兼容问题解决方法