您的位置:首页 > 大数据 > 人工智能

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地址是可信任的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐