实施身份验证系统
一、在互联网实施SSO
1.可扩展标记语言(XML)
XML可以包含标记,用于将数据描述为所需的任何内容。可用来传输和存储数据,组织使用基于XML的语言来共享身份验证信息和授权信息。
2.安全断言标记语言(SAML) 重点
安全断言标记语言是一种XML标准,允许在安全域之间共享身份验证和授权数据的交换。(交换数据)
SAML 2.0规范使用三个实体:
委托人或用户代理(Principal or Agent) --- 就是用户
服务提供者(Service Provider,SP) --- 微博,我用微信的身份登录微博
身份提供者(Identity Provider,IdP) --- 微信,我用微信完成身份验证
IdP可以发送三种类型的断言:
身份验证断言(Authentication Assertion):提供证明用户代理提交了正确的凭据,并标识了身份识别方法和用户登录时间。
授权断言(Ahthorization Assertion):提供是否授权用户代理访问请求的服务。
属性断言(Attribute Assertion):提供有关用户代理的任何信息。
3.Oauth (不是重点)
Oauth 2.0是一个授权框架,不是身份验证协议,通过交换API消息发放令牌进行授权。
OAuth提供了从另一个服务访问资源的能力。OAuth 是一个面向第三方的开放授权(而非身份验证)标准。对于该技术,一般认为,这允许用户授权网站使用用户在其他网站控制的东西。用户允许Web 站点访问第三方。
4.OpenID
OpenID 是第三方进行用户身份验证的开放标准。(站点提供方允许在应用程序中使用来自另一个服务的账户。)
5.OIDC(就是OpenID + OAuth)
OpenID Connect是一种基于JSON的RESTful身份验证协议,与OAuth配合使用时,可以提供身份验证和基本配置文件信息。OIDC 最常见的用法是,允许Web 应用程序(依赖方)使用第三方IdP 对最终用户进行身份验证,同时可从该IdP 获取有关该用户的信息。
6.比较SAML、OAuth、OpenID和OIDC
SAML使用断言来传递身份验证和授权信息,OIDC使用JWT来传递身份验证和授权信息。SAML的兄弟概念:
服务配置标记语言(SPML):基于XML,专门为交换用户信息而设计,即用于同步创建、修改、删除账号。(交换配置)
可扩展访问控制标记语言(XACML):用于在XML格式中定义访问控制策略,通常用于实现RBAC。
------------------------------------------------------
二、内部网络实施SSO
1.AAA协议
用于提供身份验证,授权和记账的协议被称为AAA协议,为远程访问系统提供集中访问控制。
2.Kerberos
Kerberos是一种票据身份验证机制,V5版本使用对称加密算法AES来保护机密性。
Kerberos核心组件:

密钥分发中心(KDC):管理所有成员的对称密钥,用于身份验证的可信第三方。
AS(Authentication Service):初始化授权认证。
TGT(Ticket granting ticket):临时票据,AS临时发放TGT。(电影票的付款记录)
TGS(Ticket Granting Service):负责票据管理(正式票据)
Ticket:正式票据,客户可以用它来向服务器证明自己的身份(在电影院换的正式票据)
流程:
1.AES加密用户名,发送给KDC,这个过程不发送任何密码;
2.KDC解密用户名通过认证,使用客户端密码的哈希值加密临时密钥(KeyC-S)
3.生成加密(KDC密码的哈希值加密)带有时间戳的授予票证TGT,这里要注意的是,用的是KDC的密码进行哈希,所以无法被客户端解密。
4.发送加密的临时密钥和加密带时间戳的授予票证TGT给客户端。这时客户端可以解出临时密钥,无法解出TGT,只能使用。
5.使用客户端密码进行哈希获取哈希值从而解出临时密钥,并安装TGT。
6.将TGT发送给KDC,请求访问服务器。
7.KDC生成服务票据ST(临时密钥KeyC-S被KeyC和KeyS分别加密,含客户端信息)发送给客户端。这里的临时密钥与之前不同,是客户端和服务器之间通信使用的。
8.客户端使用KeyC解密临时密钥KeyC-S,解密临时密钥和ST。
9.客户端将服务票据ST发送给服务器。
10.服务端用自己的KeyS解出临时密钥KeyC-S,使用临时密钥解密客户端信息
注:预身份验证,如果这个安全功能打开,则第一步需要客户端用自己的密码哈希去加密时间戳发送给KDC,KDC能够解出,从而证明客户端确实拥有这个密码。
零知识证明的简单理解:你能解出来,证明你是,而不是你提供了身份信息,所以你是。
风险点:
1、KDC是一个单点故障,如果KDC出现故障,没有人能获得所需的资源。冗余的KDC是必要的。
2、KDC必须能够实时处理收到的大量请求。它必须是可扩展。
3、秘钥临时存储在用户工作站上,这意味着入侵者有可能获得这些秘钥。
4、Kerberos容易遭受密码猜测攻击。KDC不知道是否发生字典攻击。
5、如果没有应用加密,那么Kerberos不能保护网络流量。
6、如果秘钥太短,他们可能很容易受到蛮力攻击。
7、Kerberos需要所有客户端和服务器保持时钟同步。
3.RADIUS
RADIUS使用UDP 1812和1813传输信息,传输的信息仅密码被加密。可通过使用TLS加强传输安全性,使用TCP端口2083,称为RADIUS/TLS。
4.TACACS+
Cisco专有协议,可将AAA分别托管到不同服务器,通过TCP 49端口传输,可加密所有身份验证信息。