Post on 25-May-2015
description
CAS 单点登录系统介绍
朱兴亮 Web dev
今天的主题
什么是 SSO
• SSO = Single sign-on
• 在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
• 目前比较流行的企业业务整合的解决方案之一。
什么是 CAS
• CAS = Central Authentication Service
• 最初由耶鲁大学创建• Enterprise Web Single sign-on
• 用户认证系统
CAS 不是?• 用户信息管理系统• 统一访问系统(门户导航)
但是!• 用户信息管理系统和门户导航系统都可以
作为 CAS 客户端 ( 或目标服务 ) 加入到 CAS 系统中
CAS 特点• 唯一登录认证点• 与现有认证系统无缝整合• 跨不同的应用• 简单易用• 使用 SSL 保证通信安全
CAS 中的角色
浏览器Web 应用
访问应用(不需要再提供密码)
用户登录
(需要密码,但只有 1 次)
校验用户票据是否合法
CAS 验证流程
Web应用 CAS
浏览器
S
C
T
S T
User
CAS 词汇表• CAS Server - CAS 服务端,验证中心• CAS Client – 也叫目标服务 ( Target Service ) ,纳入到
CAS 系统的应用程序• Ticket - 票据 (TGT, ST, LT, PT) ,足够随机的字符串• Ticket Granting Ticket / Ticket Granting Cookie - CAS 会
话标识。 TGC 是一个客户端 Cookie ,用来明确用户身份• Service Ticket – 服务票据,由 CAS 发出用于标识目标
服务,只能使用 1 次
吉胜 CAS 服务端结构
Memcached 在 CAS 中的作用• Ticket 会很频繁地生成和获取• Ticket 会很频繁地过期• 采用 Cache 存取 Ticket 提高性能• Cache 采用 Memcached
如何扩展认证模块?• Sicent.CAS.Server.Auth.IPasswordAuthnamespace Sicent.CAS.Server.Auth{ /// <summary> /// 表示通过用户名和密码的方式验证用户登录。 /// </summary> public interface IPasswordAuth : IAuth { /// <summary> /// 验证用户登录。验证成功返回 true ,否则返回 false 。 /// </summary> /// <param name="username">用户名。 </param> /// <param name="password">密码。 </param> /// <returns></returns> bool Authenticate(string username, string password); }}
扩展认证模块namespace Sicent.CAS.Server.Auth.DefaultProvider
{
/// <summary>
/// 表示默认实现的一个认证提供者,验证输入的用户名和密码相同的那些用户。 /// </summary>
public class SampleAuth : IPasswordAuth
{
/// <summary>
/// 只要用户名和密码相同,就返回 true ,否则返回 false 。 /// </summary>
/// <param name="username">用户名。 </param>
/// <param name="password">密码。 </param>
/// <returns></returns>
public bool Authenticate(string username, string password)
{
return username == password;
}
}
}
配置认证模块Web.config
<appSettings>
<!-- 扩展认证模块,采用测试认证接口。 -->
<add key="authAssembly" value="Sicent.CAS.Server.Auth"/>
<add key="authType" value="Sicent.CAS.Server.Auth.DefaultProvider.SampleAuth"/>
</appSettings>
吉胜 CAS 客户端模块结构• IHttpModule
• Sicent.CAS.Client.ProxyModule– 检查用户登录状态– 转向到 CAS 进行登录– 退出时转向到 CAS 清空用户信息
客户端 ( 目标服务 ) 配置Web.config<?xml version="1.0" encoding="utf-8"?><configuration> <configSections> <!-- CAS 第一步:添加配置节 --> <section name="casProxy" type="Sicent.CAS.Client.Configuration.ProxySection"/> </configSections>
<!-- CAS 第二步:配置服务器地址 --> <casProxy loginUrl="http://192.168.155.103/login.aspx?service={0}" loginGateway="http://192.168.155.103/login.aspx?gateway=true&service={0}" validateUrl="http://192.168.155.103/validate.aspx?service={1}&ticket={0}" logoutUrl="http://192.168.155.103/logout.aspx?url={0}" />
<system.web> <compilation debug="true"/>
<!-- CAS 第三步:设置为表单认证 --> <authentication mode="Forms" />
<httpModules> <!-- CAS 第四步:添加认证模块 --> <add name="casProxyModule" type="Sicent.CAS.Client.ProxyModule"/> </httpModules>
</system.web></configuration>
CAS Demo
• Demo• 客户端 1 : http://192.168.155.103:2580/
Memcached 客户端应用
吉胜 Memcached 客户端介绍• 程序集:
– Sicent.Memcached.Client
• 主要对象:– Sicent.Memcached.Client.MemcachedClient
• 特点:– 配置简单– 可存取对象 ( 实体类必须添加 Serializable 特
性 )
吉胜 Memcached 客户端配置<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="sicent.memcached" type="System.Configuration.NameValueSectionHandler" />
</configSections>
<!-- 配置 Memcached 客户端。 -->
<sicent.memcached>
<add key="servers" value=“localhost,125.64.7.123:11211,125.64.7.123:11212"/>
</sicent.memcached>
</configuration>
吉胜 Memcached 客户端使用//缓存基本类型数据
//从配置文件中获取客户端实例var memcached = MemcachedClient.GetInstance("servers");
//存数据var okay = memcached.Add("key", 333);
//获取数据var d = memcached.Get("key");//should be '333'
吉胜 Memcached 客户端使用//缓存自定义类型的对象
[Serializable]
public class MyEntity
{
public string Name{get; set;}
}
//从配置文件中获取客户端实例var memcached = MemcachedClient.GetInstance("servers");
var entity = new MyEntity();
//存数据var okay = memcached.Add("key", entity);
//获取数据var d = memcached.Get(“key”) as MyEntity;