单点登录系统如何进行统一鉴权?
1 单点登录系统统一鉴权简介
1.1 概述
目前,企业常使用多个应用系统或者多种认证方式管理用户权限,这样会造成用户认证繁琐、维护费用高和安全性较低的问题,而单点登录系统可以帮助解决这些问题。它是一种使用一次登录就可以访问所有受保护的应用程序的身份验证服务。五类用户可以利用单点登录:个人用户、企业内部职员、企业外部职员、机构和统一用户。
1.2 统一鉴权基本原理
统一鉴权是单点登录系统的核心,它由两个步骤组成:身份验证和授权.身份验证步骤包括用户提供凭证(如用户名/密码、数字证书)以及在客户端和服务器之间进行认证;授权步骤是客户端确定用户是否拥有访问资源的权限,比如有无对某个资源的查看权限。一次验证后,用户可以无需重新登录的情况下访问其他的应用程序。
2 统一鉴权技术实现
2.1 SAML(Security Assertion Markup Language)
SAML是一种基于XML和Web服务的协议,被广泛用于身份管理领域。它主要用于服务提供者和服务消费者之间的登录认证。服务提供者(CRM)验证授权身份时可使用SAML协议,使用SAML协议则需要提前在服务提供方和服务消费者之间进行元数据协商,在服务提供方和服务消费者之间分别建立单点登录系统的联合协议。
2.2 OpenID Connect(OIDC)
OpenID Connect是一种用于浏览器和服务器之间的联合体身份验证方案,它结合了OAuth2.0和Token Endpoint的标准。OIDC采用REST(简单状态转换)API接口,来实现授权服务器和客户端之间的通信。授权服务器可以为客户端生成JSON web令牌(JWT),并将其发送给客户端,客户端可以使用令牌来访问安全资源。
3 使用示例
3.1 客户端数据准备
首先,客户端需要到授权服务器注册一个账号,并申请一个client_id和client_secret值。客户端使用这两个值来连接授权服务器。同时,客户端还需要设置重定向URL,用于指定当授权成功后,授权服务器返回信息的地址。
3.2 客户端获得用户授权
客户端准备数据后,通过对客户端应用程序发起一个HTTP GET请求,可以获得服务提供方的授权并获得临时凭证(code)。客户端在发起请求时,需要带上client_id,配置的重定向URL,请求类型为authorization_code,以及状态码等参数:
HTTP GET
URL:https://auth.com/oauth/authorize?client_id=<CLIENT_ID>&redirect_uri=<REDIRECT_URI>&response_type=code&state=
3.3 授权服务器验证
接收到客户端请求后,首先会对客户端配置的重定向URL、client_id和state参数进行验证,确认授权后,会发送一段授权码(code)给客户端:
HTTP GET
URL:<REDIRECT_URI>?code=&state=
3.4 客户端换取令牌
客户端接收到授权码后,发起一个HTTP POST请求,将code发送到授权服务器:
HTTP POST
URL:https://auth.com/oauth/token
发送内容:
client_id=<CLIENT_ID>
client_secret=<CLIENT_SECRET>
grant_type=authorization_code
code=<CODE>
redirect_uri=<REDIRECT_URI>
3.5 授权服务器返回令牌
接收到客户端发送的POST请求后,会返回一个JSON格式的令牌:
HTTP/1.1 200 OK
Content-type: application/JSON
{
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJayJIOiJIUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 3600
}
客户端收到令牌后,就可以使用这个令牌向资源服务应用程序发起一个HTTP认证请求来访问用户的受保护资源了。