`
touchmm
  • 浏览: 1037863 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Authentication和Authrization(上)

阅读更多

两个案例

第一个案例是几个月前,我收到一位朋友的邮件,邀请我加入一个叫ShoppyBag的网站。我去看了,没想到注册后就让我登录GMail帐号,并且GMail提示我该网站需要访问我的通讯录,于是我当即就中断了注册过程。

对于这类需要访问我的邮箱通讯录的网站我都是非常厌恶的,无数的垃圾邮件就是来自于它们。它们通过访问你的邮箱通讯录,然后向你的联系人们发邮件,然后迅速扩大了用户量可以向VC骗钱,而用户的隐私就这样被卖掉了,更不用说那些不请自来的垃圾邮件。

当然,虽然我中断了注册过程,但用户是已经注册成功了,只是访问网站时还会不时地提示我登录GMail。仔细看了它的提示内容后,发现有一行小字写着:

Your email address book contacts will be imported to your ShoppyBag Address Book.
ShoppyBag will not store your email login information or contact anyone without your permission.

我当然知道这种登录方式这个网站不会取得我的邮箱登录信息,它也可以假装未经授权不向我的联系人发邮件,但是我完全不想把我的通讯录COPY一份给它,因为只要那东西在它手上,我就不能保证它会拿来干什么。

之后还收到别的朋友也发来这个网站的邮件,而且在People You May Know里也看到很多熟人,不知道其中有多少人是中招的多少人是相信了这个网站的。

总之我是不信任这类网站,并且不会把通讯录授权给它们的。反正对这类SNS我也没什么兴趣。

这 个网站之所以可以取得用户的GMAIL通讯录,但是又不需要知道用户的密码,就在于它使用了GMAIL的一个授权(Authorization)功能的 API,当用户被定向到GMAIL登录页面时,用户选择允许以后,这个网站就可以通过GMAIL的通讯录API取得用户的通讯录了。

第二 个 案例也是几个月前在豆瓣小组,有人发布了一个他自己做的网站,因为要注册,我懒得去看,后来他说支持GOOGLE帐号登录,我就想去看看。结果是一登录GOOGLE 帐号就提示说这个网站要访问我的GMAIL通讯录。基于前所说的原因,我就把这个帖子给封了,那个楼主就发来豆邮兴师问罪。说是第三方用GOOGLE帐号 登录就是会这样的,但是很不幸我刚好最近也研究过这一块东西,知道并非如此。

所以我们需要先搞清楚一个问题,那就是认证和授权的区别。

Authentication和Authorization的区别

As we know,用户管理功能是大部分网站的基本功能,而这其中基本的基本就是用户身份验证,简单说就是登录——也就是“如何证明‘你’就是‘你’”。这就是所谓的Authentication。

用户管理的另一个基本部分(这个部分虽然基本,但不是必须的)则是权限管理——也就是“‘你’可以干什么”。这就是所谓的Authorization。

前 面两个例子中,第一个例子就是一种第三方Authorization,它试图让用户授权给它访问用户通讯录的权限。第二个例子则是错误地使用了 Authorization进行Authentication操作——当然,这里是以善意的角度来看这个网站,要是从恶意的角度上说,也可能它就是要用这 种方式来获取用户通讯录。

传统的应用中,Authentication和Authorization都是由应用程序自己进行处理的(即集 成 认证),相对来说问题少一些。只是对于应用开发者来说比较麻烦,每做一个应 用就需要把这一套全实现一次——Copy&Paste也是体力活啊。更麻烦的是对于用户来说,每到一个网站就要把注册流程走一遍,还要碰上用户名 冲突,担心密码安全之类的问题——很多网站对我来说最常用的功能就是:取回密码。囧

集成登录后的权限管理自然也是集成处理。

于是有了单点登录(SSO)——现在这已经是大网站的标配了,都是通过一个passport的统一登录点登录网站下的各个子功能。以及第三方登录——比如现在流行的用twitter或facebook帐号登录(国内对应的是用开心人人之类的帐号登录)。

单点登录后,具体应用取得登录信息,之后的权限管理也是应用程序自己处理,passport应用一般是不管的。

当然,最开放的还是分布式登录,比如OpenID。其实关于OpenID的话题,我早在06年就写过一篇《身份验证——谈谈OpenID 》。 现实的发展跟我的预期差不多——OpenID并没有能够得到广泛的应用,最近甚至有消息说,已经有一些网站取消了对OpenID的支持,因为用的人太少 了。目前OpenID协议用得多的话也只是用于第三方登录(相当于单点登录的一种)而不是分布式登录——比如用Google帐号登录其它网站。

这个时候就需要注意Authentication和Authorization的问题了——你一定不希望别人用你的GMAIL帐号给你的朋友发垃圾邮件甚至邮件吧?如果你是一个第三方应用开发者,你的用户当然也不希望。

以上三种方式的各自优缺点已经在前文里说过了,这里不再讨论。

Authentication 和Authorization两个概念相关性很高,很容易搞混,很多时候这也没什么问题,特别是集成认证的情况下,反正全都在统一控制之下。但是对于第三 方认证的情况下就需要考虑更多一些,最好还是把两种情况分清楚比较好。因此这里主要讨论第三方认证的情况。

第三方认证有很多方式,一般分 为 两类:认证方提供专有的API供认证,比如Microsoft Passport,早年Google也有Account API供Authorization使用(当时并不提供Authentication服务),提供了对日历和通讯录等的授权访问支持;另一类是采用开放方 案,这是目前的主流,最常用的就是OpenID和OAuth。

登录及认证流程

在整个登录认证过程中,可以分成几个参与 方:一个是认证提供方(Provider),另一个是认证使用方(Consumer),介于其中的就是被认证的用户(User)。除此之外,还有一个对 象,那就是服务(Service),即用户登录后所需要使用的功能——这才是用户登录的目的。之所以要单独提到这个Service,是因为它可能是由 Consumer提供,也可能有一部分是由Provider提供。如果Provider完全不提供Service,那Provider就是一个纯粹的 Authentication提供方,如果Provider同时还提供部分Service,比如GOOGLE提供的通讯录、日历等的服务给 Consumer,那么Provider同时还是一个Authorization提供方。

其实通常的分歧也就是出在后一种情况下。因为通常 对于用户的权限管理都是集成在提供Service的Consumer端,登录只是一个Authentication过程,单点登录(SSO)就是一个典型 的情况。只有在第三方登录的情况下才会发生需要认证方提供部分Service,这时才会有部分Authorization工作“外包”的情况。因此导致二 者的混淆与误用。

其实在整个过程中,User的目的只是为了使用Consumer提供的Service,验证身份及权限只是安全性的需要。

在 一个典型的第三方Authentication过程中,User向Consumer请求某个Service,Consumer就向Provider查询 User的身份,User通过密码等方式向Provider验证身份,并允许Provider将验证结果通告Consumer,Consumer在取得 Provider的验证通过结果后,向User提供相应的Service。

而一个典型的第三方Authorization过程中,User 向Consumer请求某个Service时,这个Service可能还需要第三方提供一些辅助的Service,比如通讯录,这时Consumer就要 向Provider请求访问User的这个Service,Provider则向User提示Consumer的这个请求,User通过密码登录 Provider并同意这个请求后,Provider把授权结果返回给Consumer(通常是通过返回一个Token),Consumer这时不但验证 了User的身份,同时还得到了它所需要的User的某些Service访问权限,之后它就可以以这个User的身份访问Provider的相关 Service了。

(上面本来想配两张图的,但是嫌麻烦,懒得画了-_-)

OpenID就是解决前一种场景,而OAuth则是解决后一种情况。

(待续)

分享到:
评论

相关推荐

    C#中Authentication类的使用

    在C#编程环境中,Authentication类是用于处理用户验证的核心组件,尤其在构建Web应用程序时扮演着重要角色。本文将深入探讨C#中的Authentication类以及如何使用它来处理Cookie,特别是聚焦于Forms Authentication。 ...

    redis连接报错error:NOAUTH Authentication required

    Redis 连接报错 Error:NOAUTH Authentication required 解决方案 Redis 是一个开源的、基于内存的数据结构存储系统,可以用作数据库、缓存和消息代理中间件。然而,在使用 Redis 时,可能会遇到各种错误,例如 ...

    MySQL连接抛出Authentication Failed错误的分析与解决思路

    【MySQL连接错误分析与解决】 ...总之,解决“Authentication Failed”错误需要综合考虑客户端代码、数据库配置、网络环境和系统性能等多个因素。通过细致的分析和测试,通常能找到问题的根源,并采取相应的优化措施。

    FormsAuthentication 权限验证

    3. **配置文件**:Web.config中关于身份验证和授权的配置,如启用FormsAuthentication,设置票证过期时间,以及权限控制规则。 4. **角色和用户管理**:可能包括创建和管理用户、角色的代码,以及将用户分配到角色的...

    Fuji Xerox富士施乐Authentication Adapter 使用说明书.pdf

    富士施乐Authentication Adapter使用说明书主要针对的是企业级的文档安全和身份验证解决方案,该设备通常与富士施乐的打印机或多功能设备结合使用,以增强安全性和访问控制。Authentication Adapter带有触摸屏,允许...

    关于Rails登录和验证插件http_authentication restful-authentication

    在使用`restful-authentication`时,开发者需要配置数据库迁移,创建必要的模型和控制器,以及调整路由以支持认证流程。 在提供的文件列表中,我们看到了`authlogic.gemspec`,这表明可能还涉及了另一个知名的认证...

    iPod_Authentication_Coprocessor_Spec

    **iPod Authentication Coprocessor**是苹果公司(Apple Inc.)开发的一种专用芯片,用于在iPod和其他Apple设备之间进行安全的数据交换。此规格文档(iPod_Authentication_Coprocessor_Spec)详细介绍了该芯片的功能...

    CAS(Central Authentication Service、中央认证服务)

    CAS(Central Authentication Service,中央认证服务)是一种广泛使用的开源身份验证框架,主要目的是提供单一登录(Single Sign-On,SSO)功能。它允许用户通过一个认证界面登录,然后在多个应用系统之间无缝地切换...

    express-authentication-bearer:HTTP Bearer支持与快速身份验证兼容

    综上所述,`express-authentication-bearer`项目简化了在Express应用中实现HTTP Bearer Token身份验证的过程,让开发者能够更专注于构建应用的其他核心功能。同时,由于它遵循标准的OAuth 2.0规范,因此与其他OAuth...

    NR网络拒绝码-5gsm_cause = 29 (0x1d) (User authentication failed).docx

    "NR网络拒绝码-5gsm_cause = 29 (0x1d) (User authentication failed)"是其中一个特定的错误,表示UE的鉴权或授权失败。本文将深入探讨此问题的原因、3GPP协议中的相关规定以及UE如何应对这种情况。 1. 问题描述: ...

    集成Sqlserver Windows Authentication验证到第三方DB客户端软件中, 如DbVisualizer & Squirrel等

    总之,集成Sqlserver Windows Authentication到第三方DB客户端软件涉及到复杂的系统配置和可能的编程工作,目的是为了提供一个更安全、方便的数据库访问方式。对于开发人员和数据库管理员来说,理解和掌握这一技术是...

    mobile authentication

    综上所述,移动认证、加密技术和安全的P2P通信是当前移动开发领域的重要组成部分。对于Java开发者而言,掌握这些技术不仅可以提高应用程序的安全性,还能为用户提供更加可靠的服务。在未来的发展中,这些技术将持续...

    SharePoint 2010 Forms Authentication Using Custom Membership and Role Providers

    总的来说,SharePoint 2010中的自定义Forms Authentication和会员/角色提供者为企业提供了更大的灵活性和控制力,使他们能够根据特定的安全策略和数据存储需求来定制用户管理和权限控制。通过深入理解这些概念和实践...

    weblogic 认证拒绝 Authentication for user denied

    NULL 博文链接:https://vernonchen163.iteye.com/blog/1995514

    Authentication Coprocessor_coprocessor_authentication_

    AnAppledeviceverifieswhetherathird-partyaccessoryattachedtoitisauthorizedforusewiththeApple devicebyissuinganauthenticationchallengetotheaccessory.TheaccessorymustrespondtotheApple device'schallenge

    CADSContinuous Authentication on Data Streams

    这种方案虽然能够实现结果的正确性和时间上的完整性,但却存在一定的局限性,即它可能会导致不必要的数据传输——即使某些客户的结果并未因数据更新而发生变化,服务提供商也需要通知所有客户。这种现象被称为“虚假...

    WCF RIA Service 学习 案例源码 认证 Authentication SilverLight 学习

    **认证 Authentication** 在任何涉及用户安全的应用中都是至关重要的。在WCF RIA Services中,认证涉及到验证用户的身份,确保只有经过授权的用户才能访问特定资源或执行特定操作。这个案例源码很可能是展示了如何在...

    Authentication

    (5)管理员:原则上认证由个人完成,也可由管理员协助完成; 管理员级别分为5级(超级、县、镇、村、组)或(超级、县、部门、单位、股组办 )或(超级、县、企业、车间部门、班组),上级对下级担任管理员的申请有...

Global site tag (gtag.js) - Google Analytics