CAS实现单点登录(SSO)经典完整教程

合集下载

CAS_SSO单点登录实例详细步骤

CAS_SSO单点登录实例详细步骤

CAS SSO单点登录实例详细步骤原创作者:孙俊财第一步1、用keytool生成证书:命令:keytool -genkey -alias sjc -keyalg RSA -keysto re c:/store/mykey说明:这里-alias sjc 是表示生成的这个证书的别名叫sjc,-keyalg RSA 指的是采用的RSA算法,-keystore c:/store/mykey是指生成的证书存储的位置。

回车后会提示你输入keystore password,这可以自己定(这里输入sunjuncai,下面配tomcat时要用的),然后是一些个人信息及组织信息,可以轻松搞定。

注意:密码输入后,会让你输入其他信息,记得这里第一个姓名必须是服务器的域名这里我输入的是完整计算机名称:gaofeng.nmc.hamcc这里要注意如果不这样写就会报如下异常:java.io.IOException: HTTPS hostname wrong: should be <localhost>实战:C:\Documents and Settings\wangyoushi8>keytool -genkey -alias sjc -keyalg RSA -keystorec:/store/mykey输入keystore密码:sunjuncai您的名字与姓氏是什么?[Unknown]:gaofeng.nmc.hamcc您的组织单位名称是什么?[Unknown]:上海神洲数港您的组织名称是什么?[Unknown]:网络优化您所在的城市或区域名称是什么?[Unknown]:郑州您所在的州或省份名称是什么?[Unknown]:河南该单位的两字母国家代码是什么[Unknown]:ZHCN= gaofeng.nmc.hamcc, OU=上海神洲数港, O=网络优化, L=郑州, ST=河南, C=ZH 正确吗?[否]:y输入<sjc>的主密码(如果和keystore 密码相同,按回车):2、创建证书后,就导出证书:命令:keytool -export -file c:/store/server.crt -alias sjc -keystore c:/store/mykey说明:从c:/store/mykey里取出证书入到c:/store/下,如果没有指定,就是存放在目录下C:\Documents and Settings\用户目录名\实战:C:\Documents and Settings\wangyoushi8>keytool -export -file c:/store/server.crt -alias sjc-keystore C:/store/mykey输入keystore密码:sunjuncai保存在文件中的认证<c:/store/server.crt>3、为客户端的JVM导入密钥:命令:keytool -import -keystore D:/jdk1.5.0_12/jre/lib/security/cacerts -file c:/store/server.crt -alias sjc说明:注意:输入密码时密码为"changeit",这是默认密码.特别说明:这个D:/jdk1.5.0_12/jre/lib/security/cacerts是指JDK的JRE路径下的lib目录.至此,第一步完成。

springboot集成cas5.3实现sso单点登录详细流程

springboot集成cas5.3实现sso单点登录详细流程

springboot集成cas5.3实现sso单点登录详细流程什么是单点登录?单点登录(Single Sign On),简称为 SSO,是⽬前⽐较流⾏的企业业务整合的解决⽅案之⼀。

SSO的定义是在多个应⽤系统中,⽤户只需要登录⼀次就可以访问所有相互信任的应⽤系统。

我们⽬前的系统存在诸多⼦系统,⽽这些⼦系统是分别部署在不同的服务器中,那么使⽤传统⽅式的session是⽆法解决的,我们需要使⽤相关的单点登录技术来解决。

SSO单点登录访问流程主要有以下步骤:访问服务:SSO客户端发送请求访问应⽤系统提供的服务资源。

定向认证:SSO客户端会重定向⽤户请求到SSO服务器。

⽤户认证:⽤户⾝份认证。

发放票据:SSO服务器会产⽣⼀个随机的Service Ticket。

验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

传输⽤户信息:SSO服务器验证票据通过后,传输⽤户认证结果信息给客户端。

(作者补充:其实简单来说,cas就是中央认证服务,就是单点登录,单点登录简称为sso!)cas服务端部署mvn package3、把target下⽣成的war包重命名为cas.war放到tomcat下4、启动tomcat5、找到解压的⽂件由于cas默认使⽤的是基于https协议,需要改为兼容使⽤http协议,打开对应你的⽬录⽂件:D:\tomcat8\webapps\cas\WEB-INF\classes\application.properties修改application.properties⽂件,添加下⾯配置,使⽤http#使⽤http协议cas.tgc.secure=falsecas.serviceRegistry.initFromJson=true#由于https协议默认使⽤的端⼝为8443,还需我们修改为tomcat的8080端⼝server.port=8080修改HTTPSandIMAPS-10000001.json⽂件D:\tomcat8\webapps\cas\WEB-INF\classes\services⽬录下的HTTPSandIMAPS-10000001.json把原来的serviceId内容改成如下"serviceId" : "^(https|http|imaps)://.*",兼容http修改完毕。

SSO单点登录—CAS统一身份认证

SSO单点登录—CAS统一身份认证

SSO单点登录—CAS统⼀⾝份认证单点登录SSO(Single Sign ON)如:在学校登录了OA系统,再打开考试系统、教务系统,都会实现⾃动登录。

统⼀⾝份认证CAS(Central Authentication Service)CAS 是由耶鲁⼤学发起的企业级开源项⽬,历经20多年的完善,具有较⾼的稳定性、安全性。

国内多数⾼校的SSO都基于CAS。

// 3.1如果有票据,则进⾏验证CasVO casVO = checkTicket(request);if (casVO.isLogin() && clientSystem.doLogin(casVO)){// 3.2给session中写⼊登录标识(⽤于checkLogin)session.setAttribute(CasConfig.LOGIN_KEY, true);// 3.3登录成功跳转⾄业务系统urlresponse.sendRedirect(targetUrl);} else {// cas账户信息异常,跳转配置的错误页⾯String errorUrl = getErrorUrl(request);response.sendRedirect(errorUrl);}} else {// 3.2如果ticket不存在String loginUrl = getLoginUrl(request);System.err.println("loginUrl:"+loginUrl);response.sendRedirect(loginUrl);}}}private CasVO checkTicket(HttpServletRequest request) throws IOException {// 1.获取票据验证的urlString serviceValidateUrl = getServiceValidateUrl(request);System.out.println("验证票据的地址:" + serviceValidateUrl);// 2.get请求获取CAS服务器的登录信息String casUserInfoXml = doGet(serviceValidateUrl);casUserInfoXml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + casUserInfoXml;// 3.解析返回的xml结果System.out.println(casUserInfoXml);CasVO casVO = resolveCasXml(casUserInfoXml);return casVO;}/*** 业务系统的登录接⼝*/interface ClientSystem {boolean doLogin(CasVO casVO);}/*** 解析CAS账户信息* @param casUserInfoXml* @return*/private CasVO resolveCasXml(String casUserInfoXml) {final String CAS_PREFIX = "cas:";final String LOGIN_SUCCESS_KEY = CAS_PREFIX + "authenticationSuccess";final String ACCOUNT_KEY = CAS_PREFIX + "user";final String ATTRIBUTES_KEY = CAS_PREFIX + "attributes";CasVO casVO = new CasVO();if (casUserInfoXml == null || "".equals(casUserInfoXml)) {return casVO;}DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();InputStream in = null;try {DocumentBuilder docBuilder = docBuilderFactory.newDocumentBuilder();in = IOUtils.toInputStream(casUserInfoXml, Charset.forName(CasConfig.UTF_8));Document rootDoc = docBuilder.parse(in);NodeList successNodeList = rootDoc.getElementsByTagName(LOGIN_SUCCESS_KEY);if (successNodeList.getLength() > 0) {Node successNode = successNodeList.item(0);Document successDocument = successNode.getOwnerDocument();NodeList accountNodeList = successDocument.getElementsByTagName(ACCOUNT_KEY);if (accountNodeList != null&& accountNodeList.getLength() > 0) {Node accountNode = accountNodeList.item(0);Node accountText = accountNode.getFirstChild();String nodeValue = accountText.getNodeValue();casVO.setAccount(nodeValue);}NodeList attrsNodeList = successDocument.getElementsByTagName(ATTRIBUTES_KEY);if (attrsNodeList.getLength() > 0) {Node attrsNode = attrsNodeList.item(0);if (attrsNode.hasChildNodes()) {Document attrsDoc = attrsNode.getOwnerDocument();Field[] fields = casVO.getClass().getDeclaredFields();for (Field field : fields) {String fieldName = field.getName();String attrTagName = CAS_PREFIX + fieldName;NodeList attrNodeList = attrsDoc.getElementsByTagName(attrTagName);if (attrNodeList.getLength() > 0) {Node attrNode = attrNodeList.item(0);Node attrText = attrNode.getFirstChild();if (attrText != null) {field.set(casVO, attrText.getNodeValue().trim());}}}}}}} catch (Exception e) {// 解析⽤户信息失败!e.printStackTrace();} finally {IOUtils.closeQuietly(in);}return casVO;}/*** 获取验证票据的url* @param request* @return*/private String getServiceValidateUrl(HttpServletRequest request) throws IOException {// 1.获取targetUrlString targetUrl = getTargetUrl(request);System.err.println("targetUrl:"+targetUrl);* get请求* @param* @return*/private String doGet(String urlStr) throws IOException {URL url = new URL(urlStr);InputStream in = null;HttpURLConnection conn = null;try {skipSSL();conn = (HttpURLConnection) url.openConnection();conn.setConnectTimeout(5000);conn.connect();in = conn.getInputStream();return IOUtils.toString(in, Charset.forName(CasConfig.UTF_8));} finally {IOUtils.close(conn);IOUtils.closeQuietly(in);}}/*** 绕过SSL验证*/private void skipSSL() {try {HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {public boolean verify(String hostname, SSLSession session) {return true;}});SSLContext context = SSLContext.getInstance("TLS");context.init(null, new X509TrustManager[]{new X509TrustManager() {public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { }public X509Certificate[] getAcceptedIssuers() {return new X509Certificate[0];}}}, new SecureRandom());HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());} catch (Exception e) {e.printStackTrace();}}public static abstract class IOUtils {private static final int EOF = -1;private static final int DEFAULT_BUFFER_SIZE = 1024 * 4;public static void close(URLConnection conn) {if (conn instanceof HttpURLConnection) {((HttpURLConnection) conn).disconnect();}}public static void closeQuietly(InputStream input) {closeQuietly((Closeable) input);}public static void closeQuietly(Closeable closeable) {try {if (closeable != null) {closeable.close();}} catch (IOException ioe) {// ignore}}public static String toString(InputStream input, Charset encoding) throws IOException {StringWriter sw = new StringWriter();copy(input, sw, encoding);return sw.toString();}public static void copy(InputStream input, Writer output, Charset encoding) throws IOException {encoding = encoding == null ? Charset.defaultCharset() : encoding;InputStreamReader in = new InputStreamReader(input, encoding);copy(in, output);}public static int copy(Reader input, Writer output) throws IOException {long count = copyLarge(input, output);if (count > Integer.MAX_VALUE) {return -1;}return (int) count;}public static long copyLarge(Reader input, Writer output) throws IOException {return copyLarge(input, output, new char[DEFAULT_BUFFER_SIZE]);}public static long copyLarge(Reader input, Writer output, char[] buffer) throws IOException {long count = 0;int n;while (EOF != (n = input.read(buffer))) {output.write(buffer, 0, n);count += n;}return count;}public static InputStream toInputStream(String input, Charset encoding) {return new ByteArrayInputStream(input.getBytes());}}}CasUtilpackage com.zxz.sso.controller;/*** 解析的CAS账户信息*/public class CasVO {private String account;private String userName;public boolean isLogin() {return account != null && !"".equals(account);public String getAccount() {return account;}public void setAccount(String account) {this.account = account;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}}CasVO。

CAS单点登录配置全过程

CAS单点登录配置全过程

CAS配置全过程软件工具:1.cas-server-3.3.5-release.zip(CAS服务端)2.cas-client-3.1.10-release.zip(CAS客户端)3.apache-tomcat-7.0.40mons-dbcp-all-1.3-r699049.jar5.mysql-connector-java-5.1.18-bin.jar6.cas-server-jdbc-3.0.5-rc2.jar写在前面的话此配置是根据当前系统,当前的版本,仅供参考,如果有什么其他的问题可以一起研究。

第一节:先走通技术障碍第一步:环境部署1.在Tomcat 根目录下创建一个cas目录。

2.下载CAS服务器并解压,打开cas-server-3.3.5\modules,将cas-server-webapp-3.3.5.war复制到刚刚在Tomcat创建的cas目录下,并重命名为ROOT.war3.修改host文件(C:\Windows\System32\drivers\etc)添加127.0.0.1 注意:如果想在一台PC机上模拟这个单点登录,就必须域名重定向,如果是多台PC机,可以不配置此项,下文有用到,可以用相应PC机的IP代替4.修改Tomcat文件下的server.xml(apache-tomcat-7.0.40\conf\server.xml)添加内容:<Host name="" appBase="cas"unpackWARs="true" autoDeploy="true"></Host>5.启动Tomcat服务,查看信息,(如果有报错,可以根据信息查找错误),打开浏览器,输入:8080如果出现以下界面,则CAS服务端配置成功。

注:这个是最简单的CAS服务,只要输入的用户名跟密码一样,就可以正常登陆,在我们实际开发中,这个验证因为跟数据库作比较,接下来,我们就配置数据库校验。

搭建CAS单点登录服务器

搭建CAS单点登录服务器

搭建CAS单点登录服务器 最近公司的⼀个项⽬需要⽤到单点登录的功能,之前对单点登录了解得不多。

于是⽹上找了下单点登录的解决⽅案,发现CAS是个不错的解决⽅案。

于是搭个环境测试了⼀下。

这⾥记录下测试的详细步骤。

官⽹: Cas Server下载: Cas Client下载: 测试环境: jdk:java version "1.8.0_60" tomcat:apache-tomcat-7.0.65 mysql:mysql5.5.40 CAS Server:cas-server-4.0.0-release.zip CAS Client:cas-client-3.1.12-release.zip 此教程是在jdk和tomcat成功安装的基础上完成,⾄于jdk和tomcat的安装⼤家可以⽹上找找资料。

好吧,下⾯⼊正题。

⼀、⽣成证书 1、⽣成证书: keytool -genkey -alias castest -keyalg RSA -keystore F:/keys/castest ⽣成⼀个别名为castest的证书。

此处需要特别注意⼝令(后续导⼊导出证书、CAS服务器端均要⽤到此⼝类)和“名字与姓⽒”(为CAS跳转域名,否则会报错) 2、导出证书: keytool -export -file F:/keys/castest.crt -alias castest -keystore F:/keys/castest 3、将证书导⼊到客户端JRE中(注意、是导⼊JRE中),如果security中已经存在cacerts,需要先将其删除。

keytool -import -keystore "D:\Program Files\Java\jdk1.8.0_60\jre\lib\security\cacerts" -file F:/keys/castest.crt -alias castest ⼆、配置服务器端 1、从/cas/上下载cas服务器端cas-server-4.0.0-release.zip,在modules⽬录下找到cas-server-webapp-4.0.0.war,将其复制到%TOMCAT_HOME%\webapps下,并将名称改为cas.war 2、修改%TOMCAT_HOME%\conf\server.xml⽂件,去掉此⽂件83到93⾏之间的注释,修改为:<Connector SSLEnabled="true" clientAuth="false" keystoreFile="F:/keys/castest" <!—⽣成证书时的路径,证书名-->keystorePass="castest" <!—证书密码-->maxThreads="150" port="8443" protocol="org.apache.coyote.http11.Http11Protocol" scheme="https" secure="true" sslProtocol="TLS"/> 3、测试:https://localhost:8443/ 点击继续浏览此⽹页 如果此时可以正常访问,说明证书安装成功 https://localhost:8443/cas/login,出现 输⼊账号和密码 casuser Mellon 此时说明服务器端已经配置成功。

SSO、单点登录、集成CAS、OAuth2

SSO、单点登录、集成CAS、OAuth2

SSO、单点登录、集成CAS、OAuth2JeeSite 已经默认集成了两种单点登录方式(Single Sign On):1、SSO(简单登录)接口,实现快速登录系统。

2、与 Apereo CAS 服务器集成,快速实现系统登录(个人版)并实现了第三方登录 OAuth2,如:微信、QQ、支付宝、等等简单登录接口系统登录:1、设置application.yml(v4.0.x:jeesite.yml)的shiro.sso.secretKey 快速登录安全Key,若不设置将无法使用该接口。

shiro:# 简单 SSO 登录相关配置sso:# 如果启用/sso/{username}/{token}单点登录,请修改此安全key并与单点登录系统key一致。

secretKey: thinkgem# 是否加密单点登录安全KeyencryptKey: true2、举例调用地址如下,调用完成后自动登录系统:http://localhost/project/sso/{username}/{token}?url=/sys/us er/list?p1=v1%26p2=v2&relogin=true•username: 登录名,数据库中的 login_code 字段。

•token: 登录令牌,根据yml里配置的登录安全Key生产的密码。

•url: 登录之后要跳转的地址,如果url中携带参数,请使用转义字符,如“&”号,使用“%26”转义。

token生成方式:String username = "system"; // 登录系统名String secretKey = "thinkgem"; // yml 中设置的shiro.sso.secretKey 参数值。

String token = Md5Utils.md5(secretKey + username +DateUtils.getDate("yyyyMMdd"));// 如果 shiro.sso.encryptKey 为 true,则 secretKey 会自动加密。

cas实现单点登出

CAS单点登出原理类似于之前的角色,我们重写单点登出的用例。

用户从application1登出。

交互步骤如下:1.用户在application1点击登出,登出url被转向到Server。

2.Server收到登出请求后,删除用户的cookie,并且从内存中取出之前用户在所有的ap plication中的登录的sessionId,依次向这些application发送消除session请求。

并且删除之前内存中保存的用户登录的ticket号和票据的信息。

3.各个application收到Server的请求后,被single sign out的Filter拦截,根据回传的sessionId号,清除用户session。

4.单点登出完毕。

cas 实现single sign out的原理,如图所示:图一图二第一张图演示了单点登陆的工作原理。

第二张图演示了单点登出的工作原理。

从第一张图中,当一个web浏览器登录到应用服务器时,应用服务器(application)会检测用户的session,如果没有session,则应用服务器会把url跳转到CAS server上,要求用户登录,用户登录成功后,CAS server会记请求的application的url和该用户的sessionId(在应用服务器跳转url时,通过参数传给CAS server)。

此时在CAS服务器会种下TGC Cookie值到webbrowser.拥有该TGC Cookie的webbrowser可以无需登录进入所有建立sso服务的应用服务器application。

在第二张图中,当一个web浏览器要求登退应用服务器,应用服务器(application)会把url跳转到CAS server上的/cas/logout url资源上,CAS server接受请求后,会检测用户的TCG Cookie,把对应的session清除,同时会找到所有通过该TGC sso登录的应用服务器URL提交请求,所有的回调请求中,包含一个参数logoutRequest,内容格式如下:<samlp:LogoutRequest ID="[RANDOM ID]" Version="2.0" IssueInstant="[CURRE NT DATE/TIME]"><saml:NameID>@NOT_USED@</saml:NameID><samlp:SessionIndex>[SESSION IDENTIFIER]</samlp:SessionIndex></samlp:LogoutRequest>所有收到请求的应用服务器application会解析这个参数,取得sessionId,根据这个Id取得session 后,把session删除。

单点登录原理及CAS实现【面试+工作】

单点登录原理及CAS实现【面试+工作】单点登录原理及实现sso【面试+工作】WEB的登录那些事说道账户登录和注册,其实我们每天都在亲身感受着,像微博、知乎还有简书等等。

我们总是需要定期的去重新登录一下,对于这种认证机制,我们都能说出来两个名词,Cookie、Session。

的确没错,Cookie和Session是实现这一切的核心。

为什么会有Cookie和Session?区别是什么?引入这两个概念的根本原因是因为Http协议是无状态的,也就是说它不能建立起多次请求之间的关系。

所以需要引入一个能有浏览器或服务器保存的一个上下文状态,也就是Cookie和Session。

说到底Session的实现是依赖于Cookie的,因为Cookie是真正的由浏览器保存的状态,Session是利用了JSessionID。

在我看来其实两者有差异,但是根本的依赖是一样的。

Cookie也是有生命周期的,像Session级别或者有一定“寿命”的Cookie。

一切是由浏览器去维护的。

常见的跨域登录问题之前楼主主要是做账户和Passport这方面的工作,其实在跨域这也是碰见了一些问题。

对于同一个根域下的登录问题如果我们的站点有不止一个业务,那么他们可能部署在不同的机器上,也往往需要不同的域名进行区分。

但是所有的业务又都是依赖于一套账户体系,那么我们这时候需要通过一次登录解决所有站点的登录问题,那么我们这个时候可以使用一个最笨的方法:那就是一次登录成功,将Cookie写到根域下,那么这样所有的站点就能实现,同一个根域下的Cookie共享,自然实现了”单点登录“。

对于多个根域下的登录问题如果是多个根域名,那么这种情况下上面的机制就不能实现“单点登录”了。

因为之所以上面可以实现“单点登录”的效果。

是因为浏览器和Http协议的支持。

但是对于跨根域的站点之间进行Cookie 的共享是比较复杂的。

方法1:登录成功之后将Cookie回写到多个域名下。

SSO之CAS单点登录详细搭建

SSO之CAS单点登录详细搭建:环境说明:同一个机器上环境如下:操作系统:windows7 64位JDK版本:1.7.0_80web容器版本:apache-tomcat-7.0.70 64位服务端:cas-3.5.2.1.zip服务端现在地址:https:///apereo/cas/archive/v4.2.3.zip客户端:cas-client-3.3.3-release.zip客户端下载地址:/cas-clients/eclipse版本:eclipse-jee-luna-SR2-win32-x86_64.zip1、将cas-3.5.2.1 cas-client-3.3.3 标准maven工程导入eclipse 打包编译;2、修改本机C:\Windows\System32\drivers\etc\hosts (CAS单点登录系统是基于JAVA安全证书的https 访问,要使用CAS单点登录必须要配置域名, cas是不能通过ip访问的.)附件-->记事本管理员权限编辑hosts文件,加入如下三行代码后保存。

127.0.0.1 127.0.0.1 127.0.0.1 解释: =>> 对应部署cas server的tomcat,这个虚拟域名还用于服务端证书生成 =>> 对应部署client1客户端应用的tomcat =>> 对应部署client2客户端应用的tomcat3、安全证书配置3.1、管理员模式打开cmd命令窗口,生成证书,在cmd窗口输入以下命令:C:\Users\Administrator>keytool -genkey -alias ssoflyer -keyalg RSA -keysize 1024 -keypass flyer2016 -validity 365 -keystore D:\app\flyer.keystore -storepass flyer2016说明:-alias自定义的别名;-keypass指定证书密钥库的密码;-storepass和前面keypass密码相同,否则下面tomcat配置https会访问失败;-keystore指定证书的位置,例如:D:\app\目录,密钥库名称可以自定义,例如:flyer.keystore特别注意:您的名字与姓氏是什么?该项一定要使用网站的域名,例如: ,Cas Client使用httpclient访问cas server的时候,会严格的检查证书。

CAS单点登录系列

小蚂蚁-CAS单点登录系列(1)-基础知识1.单点登录1.1.概述单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。

SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

1.2.技术实现机制当用户第一次访问应用系统1的时候,因为还没有登录,会被引导到认证系统中进行登录;根据用户提供的登录信息,认证系统进行身份效验,如果通过效验,应该返回给用户一个认证的凭据--ticket;用户再访问别的应用的时候,就会将这个ticket带上,作为自己认证的凭据,应用系统接受到请求之后会把ticket送到认证系统进行效验,检查ticket的合法性。

如果通过效验,用户就可以在不用再次登录的情况下访问应用系统2和应用系统3了。

1.3.要实现SSO需要以下主要的功能所有应用系统共享一个身份认证系统;所有应用系统能够识别和提取ticket信息;应用系统能够识别已经登录过的用户,能自动判断当前用户是否登录过,从而完成单点登录的功能。

其中,统一的身份认证系统最重要,认证系统的主要功能是将用户的登录信息和用户信息库相比较,对用户进行登录认证;认证成功后,认证系统应该生成统一的认证标志(ticket),返还给用户。

另外,认证系统还应该对ticket进行效验,判断其有效性。

整个系统可以存在两个以上的认证服务器,这些服务器甚至可以是不同的产品。

认证服务器之间要通过标准的通讯协议,互相交换认证信息,就能完成更高级别的单点登录。

2.数字签名2.1.概念数字签名(又称公钥数字签名、电子签章)是一种类似写在纸上的普通的物理签名,但是使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。

一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。

2.2.主要功能保证信息传输的完整性、发送者的身份认证、防止交易中的抵赖发生。

数字签名技术是将摘要信息用发送者的私钥加密,与原文一起传送给接收者。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档