Skip to content

实施身份验证系统

时间:2023年5月5日 星期五

作者:小王

一、在互联网实施SSO


1.可扩展标记语言(XML)

XML可以包含标记,用于将数据描述为所需的任何内容。可用来传输和存储数据,组织使用基于XML的语言来共享身份验证和授权信息。

img

2.安全断言标记语言(SAML)

SAML基于XML,通常用于在联合组织间交换身份验证和授权AA)信息。SAML 2.0规范使用三个实体:

• 委托人或用户代理(Principal or User Agent)

• 服务提供者(Service Provider,SP)

• 身份提供者(Identity Provider,IdP)

img

IdP可以发送三种类型的断言:

• 身份验证断言(Authentication Assertion):提供证明用户代理提交了正确的凭据,并标识了身份识别方法和用户登录时间。

• 授权断言(Authorization Assertion):提供是否授权用户代理访问请求的服务。(被XACML替代)

• 属性断言(Attribute Assertion):提供有关用户代理的任何信息。

img

3.OAuth

OAuth 2.0是一个授权框架,不是身份验证协议,通过交换API消息发放令牌进行授权。

img

4.OpenID

OpenID是一个开放的身份验证标准,通过使用OpenID标识登录不同的网站,OpenID提供者(OP)(即IDP)进行身份验证,这些网站被称为依赖者(RP)(即服务提供者SP)。

5.OIDC

OpenID Connect(OIDC)是使用OAuth 2.0授权框架的身份验证层,即同时提供身份验证和授权。OIDC使用JSON格式Web令牌(JWT),也叫ID令牌。

img

6.比较SAML、OAuth、OpenID和OIDC

SAML使用断言来传递身份验证和授权信息,OIDC(OpenID+OAuth)使用JWT来传递身份验证和授权信息。SAML的兄弟概念:

• 服务配置标记语言(SPML):基于XML,专门为交换用户信息而设计,即用于同步创建、修改、删除账号。

• 可扩展访问控制标记语言(XACML):用于在XML格式中定义访问控制策略,通常用于实现RBAC。

二、在内部网络实施SSO

1.AAA协议

用于提供身份验证、授权和记账的协议被称为AAA协议,为远程访问系统提供集中访问控制。

2.Kerberos

密码学中零知识证明原则

Kerberos是一种票据身份验证机制,V5版本使用对称加密算法AES来保障机密性。

Kerberos核心组件

• 密钥分发中心(KDC):管理所有成员的对称秘钥,用于身份验证的可信第三方。

• 身份验证服务器(AS):托管KDC功能的服务器,主要是票据授予服务(TGS)和身份验证服务(AS),其中可以将TGS剥离另置一台服务器独立运行。

• 授予票据(TGT):主体经过KDC的身份验证后获得的身份证明,但不包含授权信息。

• 服务票据(ST):主体获得ST后才能够去访问客体。

Kerberos通信过程

img

KDC密码是自己的,无人知道

1-5是对称加密算法

Kerberos风险点

• KDC单点故障,如果KDC挂掉或被攻破,那么可用性和机密性都讲遭到破坏。

• 因为过程中涉及时间戳,因此要求严格的时间配置,需要NTP支持。

3.RADIUS

RADIUS使用UDP 1812和1813传输信息,传输的信息仅密码被加密。可通过使用TLS加强传输安全性,使用TCP端口2083,称为RADIUS/TLS。

4.TACACS+

Cisco专有协议,可将AAA分别托管到不同服务器,通过TCP 49端口传输,可加密所有身份验证信息。

img