cas sso intro

24
CAS 单单单单单 单单 单单单 Web dev

Upload: shiny-zhu

Post on 25-May-2015

2.075 views

Category:

Technology


6 download

DESCRIPTION

CAS @ sicent corp.

TRANSCRIPT

Page 1: Cas Sso Intro

CAS 单点登录系统介绍

朱兴亮 Web dev

Page 2: Cas Sso Intro

今天的主题

Page 3: Cas Sso Intro

什么是 SSO

• SSO = Single sign-on

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

• 目前比较流行的企业业务整合的解决方案之一。

Page 4: Cas Sso Intro

什么是 CAS

• CAS = Central Authentication Service

• 最初由耶鲁大学创建• Enterprise Web Single sign-on

• 用户认证系统

Page 5: Cas Sso Intro

CAS 不是?• 用户信息管理系统• 统一访问系统(门户导航)

Page 6: Cas Sso Intro

但是!• 用户信息管理系统和门户导航系统都可以

作为 CAS 客户端 ( 或目标服务 ) 加入到 CAS 系统中

Page 7: Cas Sso Intro

CAS 特点• 唯一登录认证点• 与现有认证系统无缝整合• 跨不同的应用• 简单易用• 使用 SSL 保证通信安全

Page 8: Cas Sso Intro

CAS 中的角色

浏览器Web 应用

访问应用(不需要再提供密码)

用户登录

(需要密码,但只有 1 次)

校验用户票据是否合法

Page 9: Cas Sso Intro

CAS 验证流程

Web应用 CAS

浏览器

S

C

T

S T

User

Page 10: Cas Sso Intro

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 次

Page 11: Cas Sso Intro

吉胜 CAS 服务端结构

Page 12: Cas Sso Intro

Memcached 在 CAS 中的作用• Ticket 会很频繁地生成和获取• Ticket 会很频繁地过期• 采用 Cache 存取 Ticket 提高性能• Cache 采用 Memcached

Page 13: Cas Sso Intro

如何扩展认证模块?• 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); }}

Page 14: Cas Sso Intro

扩展认证模块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;

}

}

}

Page 15: Cas Sso Intro

配置认证模块Web.config

<appSettings>

<!-- 扩展认证模块,采用测试认证接口。 -->

<add key="authAssembly" value="Sicent.CAS.Server.Auth"/>

<add key="authType" value="Sicent.CAS.Server.Auth.DefaultProvider.SampleAuth"/>

</appSettings>

Page 16: Cas Sso Intro

吉胜 CAS 客户端模块结构• IHttpModule

• Sicent.CAS.Client.ProxyModule– 检查用户登录状态– 转向到 CAS 进行登录– 退出时转向到 CAS 清空用户信息

Page 17: Cas Sso Intro

客户端 ( 目标服务 ) 配置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&amp;service={0}" validateUrl="http://192.168.155.103/validate.aspx?service={1}&amp;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>

Page 18: Cas Sso Intro

CAS Demo

• Demo• 客户端 1 : http://192.168.155.103:2580/

Page 19: Cas Sso Intro

Memcached 客户端应用

Page 20: Cas Sso Intro

吉胜 Memcached 客户端介绍• 程序集:

– Sicent.Memcached.Client

• 主要对象:– Sicent.Memcached.Client.MemcachedClient

• 特点:– 配置简单– 可存取对象 ( 实体类必须添加 Serializable 特

性 )

Page 21: Cas Sso Intro

吉胜 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>

Page 22: Cas Sso Intro

吉胜 Memcached 客户端使用//缓存基本类型数据

//从配置文件中获取客户端实例var memcached = MemcachedClient.GetInstance("servers");

//存数据var okay = memcached.Add("key", 333);

//获取数据var d = memcached.Get("key");//should be '333'

Page 23: Cas Sso Intro

吉胜 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;

Page 24: Cas Sso Intro