你如何实现 SSO 单点登录系统的统一鉴权?

SSO(Single Sing-On)即单点登录技术,是指一种登录系统的技术,它使用一个用户身份来路由到多个不同的系统,用户只需要登录系统中的一个应用,就可以访问所有相关系统的应用。SSO让用户能够在逻辑上准确、有效地跨越多个应用,而不必在每个应用上进行身份验证。

单点登录的目的是解决不同系统之间的数据应用,以降低用户输入多次登录凭据的操作,降低密码被盗的风险,改善用户的体验,实现用户的高效管理,以达到安全高效的用户身份认证和管理的目的。

SSO 单点登录系统是一个基于Web应用的身份认证和管理集成解决方案。它主要由登录服务器(Login Service)、SSO企业服务器(SSO Enterprise Server)、客户端应用(Client Application)三部分组成。

登录服务器用于接收请求,验证客户端传来的凭证信息,并向客户端发送凭证确认信息。SSO企业服务器是一个存储用户凭据信息的安全服务框架,它为客户端应用提供统一身份验证服务,实现单点登录和鉴权服务。客户端应用也就是要进行登录验证的应用系统,它们通过调用登录服务器接口,实现对用户凭证的验证和确认。

当客户端应用发送登录请求的时候,客户端应用会首先要求用户输入登录信息。接着,客户端应用将用户信息发送到登录认证服务器。登录认证服务器收到用户信息后,会去 SSO 企业服务器上校验该用户的登录信息。如果通过了校验,SSO 企业服务器就会向登录认证服务器发送一个凭证,表示该用户已经通过身份认证。而登录认证服务器再把这个凭证发送到客户端应用,客户端应用就根据此凭证来判断用户是否为正确的身份。此时用户就通过了统一鉴权,获得了登录系统的访问权限,就可以正常使用对应应用。

下面是一段典型的统一鉴权 Demo,用户在其中一个应用中登录之后,就可以跳转到另一个应用中,用于演示统一鉴权的流程:

// 应用1

// 首先定义一个全局变量,用于存储用户信息 const userInfo = { id: 1,name: ‘John’};

// 定义一个鉴权函数 const checkAuth = () => {

// 首先生成一个凭证
const token = genToken(userInfo);

// 然后路由到应用2,将凭证信息带过去
window.location.href = `http://app2.com/?token=${token}`;

}

// 监听按钮的点击 document.querySelector(’#btn’).onclick = checkAuth;

// 应用2

// 接收来自应用1的凭据,并将其发送给登录服务器进行认证 const getAuth = () => {

// 获取传送的凭据
const token = getUrlParameter('token');

// 将凭证发送到登录服务器进行认证
send(`http://login.com/auth?token=${token}`, (res) => {
    
    // 接收服务端发回的结果
    const result = res.data;
    
    if(result.status === 'success') {
    
        // 成功则将用户身份记录到本地,跳转到系统主页
        saveUserInfo(result.userInfo);
        window.location.href = `http://app2.com/index`;
    } else {
        
        // 失败则显示失败提示
        alert('登录失败,请重试!');
    }
});

}

// 监听文档加载完成 document.onload = getAuth;

以上就是 SSO 单点登录系统统一鉴权的流程和示例代码,从上面的描述中可以看出,实现统一鉴权的时候,将企业的登录信息收集到一个管理器中,采用统一的登录和认证策略即可完成统一鉴权,相比以往的登录流程,可以大大的提高用户的认证效率,增加应用的安全性。

随机文章