rubycas-server and rubycas-client demo on Ubuntu

CAS( Central Authentication Service)是由JA-SIG开发的一套开源的单点登录系统,在教育行业有着非常广泛的应用,有不少企业也在使用它。CAS的特点是安全性非常高,可维护性高。感謝Yale大学,名校就是不同。最近要做个单点登录,对比了几个开源产品,比如CAS, JOSSO…。这几天又做了ruby cas和python django cas对比。都很容易。但是ruby的这个居然也象python一样有版本的问题,各种库之间的关系太磨人,实在让我对它大跌眼镜。

版本設定:Ubuntu 10.04缺省安装。注:因为我使用VirtualBox虚拟机,新创建一个比较容易,把安装好的clone一下就可以了。如果没地方还可以用snapshot。

一、安装准备:

安装ruby

gems的版本10.04是1.3.5的,要求1.3.6以上
可按下面的步骤升级:

$ sudo gem install rubygems-update
$ cd /var/lib/gems/1.8/bin/
$ sudo ./rubygems-update
$ gem -v

二、相关软件

先熟悉相关软件吧:RubyCAS
gunark / rubycas-server

gunark / rubycas-client

三、安装配置

根据后面的尝试,确定下面的安装方式可以顺利一些:

$ sudo gem install v=2.1.2 rails
$ sudo gem install picnic
$ sudo gem install rubycas-server

* 我是在rubycas-client的源文件里看到的这个2.1.2,前面走了不少弯路。因为一开始会提醒缺少activesupport,如果缺省安装activespport, activerecord的,会安装gems3的版本。

安装完成执行sudo /usr/bin/rubycas-server,就提醒/etc/rubycas-server/config.yml这个文件不在并生成要你配置了。

配置:

/etc/rubycas-server/config.yml

#服务器配置,如果你象我一样不使用https,注释掉ssl_cert吧。
server: webrick
port: 9000
#数据库配置:
database:
  adapter: mysql
  database: casserver
  username: root
  password: 123456
  host: localhost
#认证程序配置,我使用的是明文的,你可以根据需要使用加密版本
authenticator:
  class: CASServer::Authenticators::SQL
  database:
    adapter: mysql
    database: casserver
    username: root
    password: 123456
    username_column: username
    password_column: password

创建上面提到的数据库。不习惯用mysqladmin -u root create casserver的话安装图形客户端吧。

根据指引,接下来要建立用户表,这个表没有地方说明应该怎样创建,满足什么规范,需要知晓还是自己查代码吧,我只是根据自己的分析随便写的:

create table users
(
  userid int not null auto_increment,
  username varchar(40) not null,
  password varchar(40) not null,
  full_name varchar(50) null,
  access_level int null,
  primary key(userid)
);

忘记了MySQL的auto increment类型写法,参考了这个网站:Create table: auto increment primary key。记得少数参加过的电话面试曾经有人问过cvs的命令,我告之曰我使用的是WinCVS客户端,結果他们很不以为然。有些东西只有天天用才需要记的。难道技能是以不参考任何帮助的情况下才算吗?

再次执行sudo /usr/bin/rubycas-server

访问:http://127.0.0.1:9000/随便输入用户名密码

你可能会遇到下面的错误:

NoMethodError at /login
undefined method `connection_pool' for #<Class:0xb73dfdd0>

Ruby /usr/lib/ruby/gems/1.8/gems/activerecord-2.1.2/lib/active_record/base.rb: in method missing, line 1672
Web POST 127.0.0.1/login

源代码修改:

文件:/usr/lib/ruby/gems/1.8/gmes/rubycas-server-0.7.999999.20100202/lib/casserver/authenticators/
85行

$LOG.debug "#{self.class}: [#{user_mode}] " + "Connection pool size: #{user_model.connection_pool.instance_variable_get(:@checked_out).count)}/#{user_model.connection_pool.instance_variable_get(:@connections).count}"

87行

user_mode.connection_pool.checkin(user_mode.connection)

这两句将导致server端出错,直接注释掉就可以了。这两句话的解决办法参考的居然是解决latex问题的一篇文章,见参考18。

没遇到的话你就庆祝吧,因为大功告成了。

四、rubycas-client配置:

进入rubycas-client/examples/rails目录,修改config/environment.rb文件,:cas_base_url指向正确的路径即可,比如我之前配置的http://127.0.0.1:9000,后面的/不需要。

运行ruby script/server,启动这个RoR程序。

用浏览器访问:http://127.0.0.1:3000/advanced_example/

将导向rubycas-server的认证页面http://127.0.0.1:9000/login?service=http:%3A%2F%2F127.0.0.1%3A3000%2Fadvanced_example&gateway=true,这时输入你在users表里登记的内容,就大功告成了。显示下面的页面:

AdvancedExample#my_account

abc's Account page

Extra Attributes:

[Logout]

五、各程序版本

$ ruby -v
ruby 1.8.7 (2010-01-10 patchlevel 249) [i486-linux]

$ gem -v
1.3.7

最后列一下gems:

$ gem list

*** LOCAL GEMS ***

actionmailer (2.1.2)
actionpack (2.1.2)
activerecord (2.1.2, 2.0.0)
activeresource (2.1.2)
activesupport (2.1.2, 2.0.0)
arel (1.0.1)
builder (2.1.2)
gettext (2.1.0)
i18n (0.4.1)
locale (2.0.5)
markaby (0.7.1)
picnic (0.8.1.20100201)
rack (1.2.1)
rails (2.1.2)
rake (0.8.7)
rubycas-client (2.2.1)
rubycas-server (0.7.999999.20100202)
rubygems-update (1.3.7)
tzinfo (0.3.23)

总结这些,希望能对想要使用ruby做单点登录(SSO)的朋友有所帮助。我喜欢使用的语言少。其实服务器使用JA-SIG的官方版本也是可以的。毕竟CAS算是个协议吧。

有个希望,希望我用完python的时候,这些还没有忘记。

参考文章:

1. ruby on rails 的安装

2. Install Ubuntu Lucid Lynx 10.04 development server with Apache2 + Ruby + Passenger + PHP5 + MySQL + SQLite3 + Imagemagick

3. Install Ruby on Rails – Lucid Lynx

4. rubycas-server文档

5. How can I get RubyGems 1.3.6 on Ubuntu 10.4

gem install rubygems-update
cd /var/lib/gems/1.9.1/bin
sudo ./update_rubygems

6. Cannot run rubycas-server if Rails 3 gems

7. Rails单点登录解决方案CAS

8. Setup JOSSO Agent – Apache 2.2

9. 主题:RubyCAS—–来自ruby世界的一款灵巧的CAS服务器

10. RubyCAS—–来自ruby世界的一款灵巧的CAS服务器

11. http://rubycas-client.rubyforge.org/

12. RubyCAS-Client Readme

13. RapidSSL

14. NameError: uninitialized constant Picnic::Config when trying to run rubycas-server

15. Ubuntu server 10.04安装apache+passenger+ruby+rails+mysql环境

16. rails知名应用和工具

17. Cannot run rubycas-server if Rails 3 gems (activerecord and activesupport) are installed

18. 奇怪的编译错误,请大家帮忙看看

19. 慎用establish_connection

20. RUBYCAS-Server error

21. Rails Development on Ubuntu 10.04

22. Java版本的CAS服务器搭建

23. CAS项目实践

24. 用 Ruby 脚本在 Project_Zero 平台上构建 Restful 应用

25.

打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注