数字身份认证与授权:三种主流身份认证协议入门指南
摘要: 当前的身份认证技术在为用户提供便利服务的同时,其弊端也正在凸显,比如隐私泄露、身份欺诈窃取、身份无法跨境互认等。但我们相信,技术的进步总是出人意料,区块链的发展将为数字身份的发展注入更多活力,并有望推动其成为全球通用的可信基础设施。
无论是PC客户端还是移动端,第三方应用账户登录已经成为了标配,特别是在网络账户相互打通的前提下,不同平台对身份已经做到了互认。第三方账户在登录时,既要限制用户身份,只让有效注册的用户才能登录,也要根据注册用户的不同身份来控制能浏览的内容,这就需要认证和授权。
如今,区块链的出现,为去中心化数字身份提供了又一种全新的技术路径。面对如此之多的身份认证技术,我们需要重新审视当前技术的优势与不足,从而为区块链数字身份的发展提供更多有价值的参考。
什么是认证、授权、单点登录?
认证(Authenticate)和授权(Authorize),是两个容易混淆的概念。认证过程是证实某个用户是他所声明的那个人;授权则要决定一个身份是否能够访问网站资源。由此可见,应用需要先认证用户身份,然后依据用户身份进行授权,二者需要联合使用。
对于微信这样的应用,用户在登录后会得到该账户的身份凭证。如果其他第三方应用信任并接受微信的身份凭证,就可以直接使用该凭证通过第三方的认证而登录。至于登陆之后用户能有权限去做什么,则是要第三方应用根据自己的政策进行授权。有些网站在第一次使用微信账户登录时,需要绑定已用账户,就是因为虽然网站能够通过微信账户的身份认证,但是对于这样的账户没有对应的授权。
对于一个面向体系内部的服务环境,可能有邮箱系统、网上办公系统、财务系统等。如果每个系统都是独立的,那么公司的员工就需要每一个系统都分配一个账户,这样显然是低效且麻烦的。
目前,通用解决方案是单点登录(Single Sign-On,简称SSO),用户在内网中只需登录一次,就可以访问所有相互信任的应用系统。单点登录和统一认证中主要的三个协议是OpenID、OAuth、SAML,被称为单点登录的“三驾马车”。
OpenID:去中心化认证的第三方登录经典模式
谈到单点登录和身份认证,就不得不谈OpenID。最典型的使用实例就是使用Google账户登录其他应用,这一经典的协议模式,为其他厂商的第三方登录起到了标杆的作用,被广泛参考和使用。
OpenID是一个去中心化的数字身份识别框架,属于认证(Authentication)协议。OpenID的创建基于这样一个概念:我们可以通过统一资源标识符(URI)来认证一个网站的唯一身份对于支持OpenID的网站。用户不需要记住像用户名和密码这样的传统验证标记。取而代之的是,他们只需要预先在一个作为OpenID身份提供者(Identity Provider, IdP)的网站上注册。
任何网站都可以使用OpenID来作为用户登录的一种方式,也都可以作为OpenID的身份提供者,它既解决了问题而又不需要依赖于中心化的网站来确认数字身份。
OpenID的第一部分是身份验证,即如何通过 URI来认证用户身份。目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。如果使用OpenID,你的网站地址(URI)就是你的用户名,而你的密码安全的存储在一个OpenID服务网站上。
由于良好的通用性,OpenID正在被越来越多的大型互联网平台采用,比如作为身份提供者的AOL和Orange。它既可以应用于单点登录系统,也可以用于共享敏感数据时的身份认证。由于URI是整个网络世界的核心,它为基于URI的用户身份认证提供了广泛的、坚实的基础。
OAuth:不触碰用户信息即可授权的“黑匣”协议
OAuth协议为用户资源的授权提供了一个安全、开放且简易的标准。比起OpenID,OAuth更像是一个授权(Authorization)协议,其独特之处在于,它可以让第三方应用程序在不获取用户账号密码的情况下,获得属于用户的资源或是进行符合用户权限的操作。在这个过程中,令牌(Token)成为核心节点。OAuth2.0通过IdP给第三方应用颁发令牌来实现以上功能,第三方应用则通过使用令牌向资源服务换取对应的资源。
OAuth2.0是2006年提出来的新一代OAuth版本,比起OAuth1.X,它简化了认证交互过程,增加了认证机制,并对代码和可能出现的漏洞进行了优化与修改。OAuth2.0协议主要有四个角色:用户、资源服务器、授权服务器、客户端。
那么这四个角色完成一个怎样的流程呢?举个例子,Alice要外出一段时间,让自己的朋友Bob代为照顾她的房子,所以Alice把自己房子的钥匙交给了Bob,而Bob也就可以任意进入房子。这里的钥匙就是一种授权的体现——Alice授权Bob进入房子。这其中,房子所有者Alice就是用户,Bob是客户端,而门锁就是授权服务器,房子是资源服务器。
SAML:兼顾认证与授权的身份信息共享通道
SAML协议(Security Assertion Markup Language,安全性断言标记语言)是三者中时间最长的协议,最初版本制定于2001年,并于2005年修改。作为一种安全性断言标记语言,SAML协议既可以用于认证也用于授权。
所谓的安全性断言,就是关于认证、授权以及用户属性(比如用户姓名、住址等信息)的声明集合,在SAML中,这些断言以XML格式进行传输。SAML的主要功能是在不同的安全域之间提供身份认证和授权信息交换,为用户跨平台进行身份认证和授权提供了方便,解决了多个系统共享认证、授权过程中的信息传递问题。
当要验证一个用户身份时,服务提供商(Service Provider,简称SP)会向IdP发出SAML认证请求,该请求中会以XML格式说明认证方式的设置,比如希望IdP以何种方式验证用户。IdP在认证通过用户身份之后,会返回SAML请求响应,同样以XML格式返回断言表明用户身份和相关属性,此外SAML安全性断言信息必须要使用数字签名以保证其完整性和不可抵赖性。SP接收到SAML断言之后,验证其消息来源是否费受信任的IdP,验证通过之后解析XML获得认证信息。
当前的身份认证技术在为用户提供便利服务的同时,其弊端也正在凸显,比如隐私泄露、身份欺诈窃取、身份无法跨境互认等。但我们相信,技术的进步总是出人意料,区块链的发展将为数字身份的发展注入更多活力,并有望推动其成为全球通用的可信基础设施。
(作者:IDHub,内容来自链得得内容开放平台“得得号”;本文仅代表作者观点,不代表链得得官方立场)
评论(0)
Oh! no
您是否确认要删除该条评论吗?