Android 连接Cas服务器的实现单点登录(SSO)
如果我们的网站需要和另一个域名做统一认证,也就是在我们网站登录,但真正的功能却在另一个网站来提供。许多都以 passport 的方式。 整个认证可以分三步完成 第一步:本地验证
这个很简单,输入本地的用户名和密码,然后服务器认证通过,并返回正确的Cookie;
第二步:做远程认证,并返回远程连接
通过本地Cookie,确认用户合法性,然后服务器端调用远程的登录程序,返回一个远程认证号的URL,这个URL里面包含了一个唯一的认证码,使用Location的方式
第三步:远程登录
客户端使用前一步的URL,访问远程的服务器,服务器确认认证码的正确性,再返回正确的远程Cookie
至此,本地认证,通过一个URL,实现了远程认证。
SSO是单点登录的简称,常用的SSO的协议有两种,分别是SAML和OAuth2。本文将会介绍两种协议的不同之处,从而让读者对这两种协议有更加深入的理解。
SAML的全称是Security Assertion Markup Language, 是由OASIS制定的一套基于XML格式的开放标准,用在身份提供者(IdP)和服务提供者 (SP)之间交换身份验证和授权数据。
SAML的一个非常重要的应用就是基于Web的单点登录(SSO)。
在SAML协议中定义了三个角色,分别是principal:代表主体通常表示人类用户。identity provider (IdP)身份提供者和service provider (SP)服务提供者。
IdP的作用就是进行身份认证,并且将用户的认证信息和授权信息传递给服务提供者。
SP的作用就是进行用户认证信息的验证,并且授权用户访问指定的资源信息。
接下来,我们通过一个用SAML进行SSO认证的流程图,来分析一下SAML是怎么工作的。
上图中User Agent就是web浏览器,我们看一下如果用户想请求Service Provider的资源的时候,SAML协议是怎么处理的。
SP将会对该资源进行相应的安全检查,如果发现已经有一个有效的安全上下文的话,SP将会跳过2-7步,直接进入第8步。
RelayState是SP维护的一个状态信息,主要用来防止CSRF攻击。
其中这个SAMLRequest是用Base64编码的<samlp:AuthnRequest>,下面是一个samlp:AuthnRequest的例子:
为了安全起见,SAMLRequest还可以使用SP提供的签名key来进行签名。
IdP收到这个AuthnRequest请求之后,将会进行安全验证,如果是合法的AuthnRequest,那么将会展示登录界面。
这个form中包含了SAMLResponse信息,SAMLResponse中包含了用户相关的信息。
同样的SAMLResponse也是使用Base64进行编码过的<samlp:Response>。
我们可以看到samlp:Response中包含有saml:Assertion信息。
我们可以看到上面的所有的信息交换都是由前端浏览器来完成的,在SP和IdP之间不存在直接的通信。
这种全部由前端来完成信息交换的方式好处就是协议流非常简单,所有的消息都是简单的GET或者POST请求。
如果为了提高安全性,也可以使用引用消息。也就是说IdP返回的不是直接的SAML assertion,而是一个SAML assertion的引用。SP收到这个引用之后,可以从后台再去查询真实的SAML assertion,从而提高了安全性。
SAML协议是2005年制定的,在制定协议的时候基本上是针对于web应用程序来说的,但是那时候的web应用程序还是比较简单的,更别提对App的支持。
SAML需要通过HTTP Redect和HTTP POST协议来传递用户信息,并且通常是通过HTML FORM的格式来进行数据的提交的。如果应用程序并不是web应用,比如说是一个手机App应用。
这个手机APP应用的启动链接是 my-photos://authenticate , 但是手机app可能并不能获取到Http POST的body内容。他们只能够通过URL来进行参数的传递。
这就意味着,在手机APP中不能够使用SAML。
当然,要想工作也可以,不过需要进行一些改造。比如通过第三方应用对POST消息进行解析,然后将解析出来的SAMLRequest以URL参数的形式传递给APP。
另一种方法就是使用OAuth2
因为Oauth2是在2012年才产生的。所以并没有那么多的使用限制。我们可以在不同的场合中使用OAuth2。
我们先来看一下OAuth2中授权的流程图:
一般来说OAuth2中有4个角色。
resource owner: 代表的是资源的所有者,可以通过提供用户名密码或者其他方式来进行授权。通常来是一个人。
resource server:代表的是最终需要访问到资源的服务器。比如github授权之后获取到的用户信息。
client: 用来替代resource owner来进行交互的客户端。
authorization server: 用来进行授权的服务器,可以生成相应的Access Token。
整个流程是这样的:
Client向resource owner发起一个授权请求,resource owner输入相应的认证信息,将authorization grant返回给client。
client再将获取到的authorization grant请求授权服务器,并返回access token。
client然后就可以拿着这个access token去请求resource server,最后获取到受限资源。
OAuth2并没有指定Resource Server怎么和Authorization Server进行交互。也没有规定返回用户信息的内容和格式。这些都需要实现方自己去决定。
OAuth2默认是在HTTPS环境下工作的,所以并没有约定信息的加密方式。我们需要自己去实现。
最后,OAuth2是一个授权协议,而不是认证协议。对于这个问题,其实我们可以考虑使用OpenID Connect协议。因为OpenID Connect就是基于OAuth2实现的,并且添加了认证协议。
OpenID Connect简称为OIDC,已成为Internet上单点登录和身份管理的通用标准。 它在OAuth2上构建了一个身份层,是一个基于OAuth2协议的身份认证标准协议。
OAuth2实际上只做了授权,而OpenID Connect在授权的基础上又加上了认证。
OIDC的优点是:简单的基于JSON的身份令牌(JWT),并且完全兼容OAuth2协议。
在SAML协议中,SAML token中已经包含了用户身份信息,但是在OAuth2,在拿到token之后,需要额外再做一次对该token的校验。
但是另一方面,OAuth2因为需要再做一次认证,所以可以在 Authorization Server 端对token进行无效处理。
做过SSO的应该都听说过CAS。CAS的全称是Central Authentication Service,是一个企业级的开源的SSO认证框架。
CAS内部集成了CAS1,2,3,SAML1,2,OAuth2,OpenID和OpenID Connect协议,非常的强大。我们会在后面的文章中介绍CAS的使用。
主要内容包括:
认证类型可以分为单向认证、双向认证以及第三方认证。
认证技术方法主要有口令认证技术、智能卡技术、基于生物特征认证技术、Kerberos技术等多种实现方式。
(1)口令认证是基于用户所知道的秘密而进行的技术,是网络常见的身份认证方法。网络设备、操作系统和网络应用服务等都采用了口令认证。
(2)口令认证一般要求参与认证的双方按照事先约定的规则,用户发起服务请求,然后用户被要求向服务实体提供用户标识和用户口令,服务实体验证其正确性,若验证通过,则允许用户访问。
(3)口令认证的优点是简单、易于实现,当用户想要访问系统时,要求用户输入“用户名和口令”即可。
(4)口令认证的不足是容易受到攻击,主要的攻击方式有窃听、重放、中间人攻击、口令猜测等。因此,要实现口令认证的安全,应至少满足以下条件:
① 口令信息要安全加密存储;
② 口令信息要安全传输;
③ 口令协议要抵抗攻击,符合安全协议设计要求;
④ 口令选择要做到避免弱口令。
为了保证口令认证安全,网络服务提供商要求用户遵循口令生成安全策略,即口令设置要符合口令安全组成规则,同时对生成的口令进行安全强度评测,从而促使用户选择安全强度较高的口令。
智能卡是一种带有存储器和微处理器的集成电路卡,能够安全存储认证信息,并具有一定的计算能力。
通过智能卡来实现挑战/响应认证
在挑战/响应认证中,用户会提供一张智能卡,智能卡会一直显示一个随时间而变化的数字,假如用户视图登录目标系统,则系统首先将对用户进行认证,步骤如下:
(1)用户将自己的ID发到目标系统
(2)系统提示用户输入数字
(3)用户从智能卡上读取数字
(4)用户将数字发送给系统
(5)系统收到数字对ID进行确认,如果ID有效,系统会生成一个数字并将其显示给用户,称为挑战
(6)用户将上面的挑战输入到智能卡
(7)智能卡用这个输入的值根据一定算法计算出一个新的数字并提示这个结果,该数字称为应答
(8)用户将应答输入系统
(9)系统验证应答是否正确,如果正确,用户通过验证并登录进入系统
基于生物特征就是利用人类生物特征进行验证。目前,指纹、人脸、视网膜、语音等生物特征信息可用来进行人的生物认证,人的指纹与生俱来,并且一生不变。
一、定义
kerbors是一个网络认证协议,其目标是使用秘钥加密为客户端/服务器提供加强身份认证,其技术原理是利用对称加密密码技术,使用可信的第三方来为应用服务提供认证服务,并在用户和服务器之间建立安全信道。
二、一个kerbors系统设计基本实体:
(1)kerbors客户机,用户用来访问服务器设备
(2)AS(Authentcation Server,认证服务器),识别用户身份并提供TGS会话秘钥
(3)TGS(Ticket Granting Server,票据发放服务器),为申请服务的用户授予票据(Ticket)
(4)应用服务器,为用户提供服务的设备或系统
其中通常将AS和TGS统称为秘钥发放中心KDC(Key Distribution Center)。票据(ticket)是用于安全传递用户身份所需要的信息的集合,主要包括客户方Principal、客户方IP地址、时间戳(分发该Titcket的时间)、Ticket的生存期、以及会话秘钥等内容。
三、KerborsV5认证协议主要由六步构成
kerbors协议中要求用户经过AS和TGS两重认证的优点主要有以下两点:
(1)可以显著减少用户密钥的密文的暴露次数,这样就可以减少攻击者对有关用户的密钥的密文的积累
(2)kerbors认证过程中具有单点登录(Signle Sign On,SSO)的优点,只要用户拿到了TGT并且该TGT没有过期,那么用户就可以使用该TGT通过TGS完成到任一服务器的认证过程而不必输入密码。
四、缺点:
kerbors存在不足之处,kerbors认证系统要求解决主机时间节点同步问题和抵御拒绝服务攻击。
目前windos系统和Hadoop都支持kerbors认证。
PKI(Public Key Infrastructure )就是有创建、管理、存储、分发和撤销公钥证书所需要的硬件、软件、人员、策略和过程的安全服务设施。PKI提供了一种系统化的、可扩展的、统一的、容易控制的公钥分发方法。
基于PKI的主要安全服务有身份认证、完整性保护、数字签名 、会话加密管理、秘钥恢复。
PKI涉及多个实体之间的协商和操作,主要实体包括CA、RA、终端实体、客户端、目录服务器。
PKI各实体的功能分别叙述如下:
CA(Certification Authority):证书授权机构,主要进行证书的颁发
RA(Registration Authority):证书登记权威机构
目录服务器:CA通常使用一个目录服务器, 提供证书管理和分发的服务
终端实体:指要认证的对象,例如服务器、打印机、Email地址、用户等
客户端:指需要基于PKI安全服务的使用者,包括用户、服务进程等
单点登录:是指用户访问使用不同的系统时,只需要进行一次身份认证,就可以根据这次登录的认证身份访问授权资源。单点登录解决了用户访问使用不同系统时,需输入不同系统的口令以及保管口令问题,简化了认证管理工作。
认证技术是网络安全保障的基础性技术,普遍应用于网络信息系统保护。认证技术常见的应用场景如下:
(1)用户身份验证:验证网络资源访问者的身份,给网络系统访问授权提供支持服务
(2)信息来源证实:验证网络信息的发送者和接收者的真实性,防止假冒
(3)信息安全保护:通过认证技术保护网络信息的机密性、完整性、防止泄密、篡改、重放或延迟。
什么是身份验证和授权
根据RFC2828(Internet Security Glossary,May2000),验证是“校验被或向某系统实体声明的身份的过程”。此处的关键字是校验,而正确的术语是“验证系统校验身份”。
验证可以提供保证,确保用户(或系统)是他们所说的身份。应用程序获取用户的凭据(各种形式的标识,如用户名和密码)并通过某些授权机构验证那些凭据。如果这些凭据有效,则提交这些凭据的实体被视为经过身份验证的标识。授权指用户访问网络资源的能力,通过对已验证身份授予或拒绝特定权限来限制访问权限。
验证可以直接在用户试图访问的计算机上执行,但在分布式环境中,用户帐户和安全信息通常由特殊的安全服务器存储和管理。当用户登录时,用户名和密码靠安全服务器进行校验。如果校验正确,密码将不会再通过电缆发送。用户密码保持秘密并从不通过网络是至关重要的,尤其是当密码为可读文本时,窃听者可以轻易捕获这些信息并使用它假装成该用户访问安全系统。相反,独特的握手式方案如此处所述以安全方式验证用户身份。
尽管单独的安全服务器提供许多好处(集中的安全和安全管理),但在分布式环境中对用户进行身份验证呈现出许多有趣的挑战。
例如,假设某用户希望访问称为DOCS的安全服务器,当该用户登录时,其登录信息直接或间接地用于验证其身份。现在该用户试图访问DOCS服务器,假设DOCS“信任”该安全服务器,并假设它可正确地验证该用户。安全服务器已经验证了该用户的身份,因此DOCS也尝试验证该用户的身份就没有意。所需要的是“一次注册”验证方案,该方案可在无需进一步的登录请求的情况下使该用户访问信托网络环境中的任何系统,假设该用户具有整个网络的一个用户帐户。这可以按如下所示完成。
该用户的登录信息可以被缓存。当该用户访问另一台服务器时,该服务器获取登录信息,并用安全服务器校验登录信息。
当该用户第一次登录时,安全服务器可以发出登录凭证。该用户在登录会话的期间访问其他系统时将使用这些凭证。根据RFC l704 (On Internet Authentication, October 1994)释义,一个安全验证方案必须提供如下所示的“强相互验证”:
相互验证 交换中的双方使用可靠的方法了解对方身份的真实性。
强验证 双方都不获取可用于在另一会话中假冒对方的信息。
密码可用于相互验证,但不用于强验证。如果一方将其密码直接交给另一方,则会将有关自身的某些内容暴露出来,而其他系统可以使用这些信息冒充它。本质上,第一个“说话者”放弃了密码,并且变得易受攻击。窃听者也可以捕获密码并在以后使用(除非密码为一次性密码)。
强验证方案允许双方显示它们知道秘密而不展现实际秘密。再看前面的示例,假设某用户具有一个机密密码,他必须向安全服务器证明他知道密码,但不将密码通过网络传输。下面的四路握手方案是一个示例:
1、当该用户登录时,他的计算机生成随机数,并使用密钥对其加密。请注意,此密钥是从密码中导出的,或者是从本地加密文件获取的,而该加密文件只有在输入了正确的密码后才可访问。
2、结果发送到安全服务器,后者使用共享的密钥进行解密。
3、现在安全服务器具有该用户的服务器生成的随机数。它将该数字加1,然后生成自己的随机数,并用共享密钥为两者分别加密。
4、该用户的计算机接收该消息并解密。消息的第一部分应该是此计算机原来发送到安全服务器并加1的随机数,它证明此计算机与知道共享密钥的系统有联系。
5、下一步,该用户的计算机将从安全服务器接收的随机数加1,进行加密,然后将它返回到服务器。
6、当服务器接收此消息时,其随机数已经加1,服务器知道客户端一定是可信的。
经过验证后,客户端和服务器建立新密钥,在会话的剩余时间内该新密钥用于加密。这使登录密钥的使用变得最小。当然,共享的秘密必须保持秘密。如果有人获得它,这个人即可伪装成客户端或服务器。
经过这么多年,已经开发了许多验证协议和技术。CHAP(挑战握手验证协议)是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令,其中包括会话ID和一个任意生成的挑战字串。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈希方式发送。
另一个协议是EAP(可扩展验证协议)。EAP是一种框架,支持可选择的多重PPP验证机制,包括纯文本密码,挑战-响应和任意对话顺序。
下面概述其他几种更先进的方案:
双因子验证 在此方法中,使用令牌设备(如智能卡)生成一个附加登录代码。此登录代码与服务器知道的代码在时间上同步。用户在登录时输入此代码、用户名及密码。因而需要两项才能登录:用户知道的某些内容(用户密码)以及用户具有的某些内容(令牌)。此方案要求所有用户都要有智能卡,并且此方案通常是为远程用户实现的。
Kerberos Kerberos是一个根据票证执行验证的制定得很好的协议。其命名是根据希腊神话中守卫冥王大门的长有三头的看门狗做的。定名是贴切的,因为Kerberos是一个三路处理方法,根据称为密匙分配中心(KDC)的第三方服务来验证计算机相互的身份,并建立密匙以保证计算机间安全连接。
票证是由称为KDC(密钥分发中心)的专用安全服务器发放的加密数据分组。KDC通常在企业网的内部进行维护,而企业网是KDC的授权区或管辖区。当用户登录时,由KDC处理验证。如果用户验证正确,则KDC向该用户颁发票证(称为“票证授权票”或TGT)。当此用户希望访问某个网络服务器时,KDC检查自己先前提供给用户的TGT(以校验票证依然可信),然后向用户颁发服务票证,以允许用户访问目标服务器。目标服务器具有自己的校验票证以确认用户可信的方法,并根据预定义的访问控制授予用户访问权限。
Kerberos协议基本上是可行的,因为每台计算机分享KDC一个秘密,KDC有两个部件:一个Kerberos认证服务器和一个授票服务器。如果KDC不知请求的目标服务器,则求助于另一个KDC完成认证交易。Kerberos是一种网络认证协议,允许一台计算机通过交换加密消息在整个非安全网络上与另一台计算机互相证明身份。一旦身份得到验证,Kerberos协议给这两台计算机提供密匙,以进行安全通讯对话。Kerberos协议认证试图等录上网用户的身份,并通过使用密匙密码为用户间的通信加密。
证书、公钥和PKI(公共密钥基础结构) 如果要求安全登录到因特网服务器或其他公共服务器,则证书方案是适当的。证书基本上是数字ID,它受众所周知的证书颁发机构(如VeriSign)保护。它可以证明在连接另一端的人是其所说的身份。此方案使用公钥加密,并为用户提供一种方法,以向您提供其用于身份验证的公钥,以及在客户端和服务器之间加密会话。此方案与Kerberos的区别是Kerberos要求联机安全服务器对用户进行验证。证书是自包含的数据分组,其中包括对用户进行验证所需的所有内容。但是,它要求某实体颁发证书。这可以通过公共服务(如VeriSign)完成,可通过内部证书服务器完成(当公司希望颁发自己的证书给雇员时)。
圣杯一次注册
SSO(一次注册)的概念很简单。用户只需要一次键入其用户名和密码(第一次登录时),以访问任何网络资源。在某些情况下,SSO甚至无需用户进一步提供证书即允许访问外部网络系统和因特网Web服务器。
Windows 2000网络通过使用Kerberos和Secure Sockets Layer (安全套接字层)协议可提高一次注册功能。这两种协议的优点是它们在混合网络环境中允许一次注册,而混合环境中的一些服务器可能是UNIX、Linux或也支持这两种协议的NetWare服务器。Microsoft SNA Server将SSO功能扩展到大型机环境。Microsoft声称Windows 2000是在异类网络中用作SSO集线器的最佳选择,原因是Windows 2000的SSO可以与其他供应商如此多的操作系统具有互操作性。在Windows 2000中,每个域控制器都是一个Kerberos密钥分发中心,该中心具有对应于该域的辖区。
SSL是由Netscape设计的一种开放协议;它指定了一种在应用程序协议(例如http、telnet、NNTP、FTP)和TCP/IP之间提供数据安全性分层的机制。它为TCP/IP连接提供数据加密、服务器认证、消息完整性以及可选的客户机认证。SSL的主要目的是在两个通信应用程序之间提供私密信和可靠性。
任何SSO的一个重要特性是它可以附加到用作网络管理信息(包括用户帐户)的单个储备库的一些目录服务上。Novell NetWare和Microsoft Active Directory就是这样的目录服务。目录服务提供每个用户对整个网络中系统的权限和特权的一个权威性列表,这简化了管理和控制,并允许管理员在任何时候从单个位置更改登录特权和访问权限。
可以使用的SSO解决方案很多,在此将它们列出。
PassGo验证服务器 提供一次注册或单击访问公司企业网络上的所有资源,并有助于强化公司安全标准和规程。
Axent Technologies公司的企业安全管理器 企业安全管理器使得可以从单个位置自动化计划、管理和控制安全策略。
CyberSafe Trust Broker安全套件 这种套件的特点是多平台、一次注册验证,包括公钥和Kerberos加密。它保护一个组织的公司网和外部网免受内部和外部威胁。
Platinum Technologies公司的自动安全一次注册 AutoSecure SSO设计用于异类环境,包括大型机、分布式系统和PC。它不依赖于平台、应用程序、网络甚至其他安全机制。
ZOOMIT VIA 一个元目录服务,它使得设计、自定义和布署统一的企业目录服务变得容易。对于此讨论最重要的是,VIA对多个系统提供一次注册。
0条评论