Giới thiệu gem CASino

CASino là gì?

CASino là một ứng dụng Single sign-on server, hỗ trợ CAS protocol và có thể kết hợp với gần như toàn bộ ngôn ngữ lập trình web hiện nay.

CAS là hệ thống xác thực đầu tiên được xây dựng bởi trường đại học Yale nhằm mục đích cung cấp một con đường đáng tin cậy để xác thực một người dùng. CAS cung cấp cho mọi ứng dụng của bạn quyền cho người dùng đăng nhập single sign-on server.

Cài đặt

Cài đặt qua CASinoApp

Sử dụng CASinoApp là cách đơn giản nhất và được khuyên dùng để cài đặt và sử dụng CAS server.

  • Cài đặt trực tiếp
cd CASinoApp
gem install bundler
./script/install sqlite # choose either sqlite (not recommended), postgres or mysql
  • Sử dụng Multi-staging Environment
cd CASinoApp
gem install bundler
bundle install

Cài đặt từ ứng dụng Ruby on Rails

  • Tạo một ứng dụng Ruby on Rails
rails new my-casino --skip-test-unit --skip-bundle
cd my-casino
  • Include và cài đặt CASino gem
gem 'sqlite3'   # for sqlite support
gem 'mysql2'    # for mysql support
gem 'pg'        # for postgresql support
gem 'casino'
  • Generate CASino configuration files
bundle exec rails g casino:install

Cấu hình gem CASino

CASino cho phép thay đổi hành vi của nó thông qua các parameters, được lưu trữ ở trong các file YAML. Các level đầu tiên của parameters luôn là environments, như development, staging hay production. CASino cho phép bạn config tất cả environments trong cùng một file.

Database

CASino cần một database để lưu trữ session data, user settings và các CAS data có liên quan khác. Giống như ứng dụng Ruby on Rails, cấu hình của database được đặt trong file config/database.yml.

Nếu bạn thay đổi cài đặt của database, hãy load một empty database schema:

bundle exec rake db:migrate SCOPE=casino

CAS

Cấu hình CAS được lưu trữ ở config/cas.yml. Đây là nơi cấu hình cách SSO xử lí các đăng nhập.

  • LDAP

Ví dụ về cấu hình một authentication dựa trên LDAP directory service:

authenticators:
  my_company_ldap:
    authenticator: "LDAP"
      options:
        host: "localhost"
        port: 636
        base: "ou=People,dc=example,dc=com"
        username_attribute: "uid"
        encryption: "simple_tls"
        admin_user: "cn=admin,dc=example,dc=com"
        admin_password: "password"
        extra_attributes:
          email: "mail"
          fullname: "displayname"

Ở ví dụ trên, extra_attributes cho phép gửi thêm dữ liệu tới services sử dụng SSO. Services sẽ nhận một trường tên là email, tương ứng với mail trong LDAPfullname, tương ứng với displayname được lưu trong LDAP.

  • Database

Ví dụ về cấu hình authentication dựa trên một bảng MySQL:

authenticators:
  my_user_database:
    authenticator: "ActiveRecord"
    options:
      connection:
        adapter: "mysql2"
        host: "localhost"
        username: "casino"
        password: "secret"
        database: "users"
      table: "users"
      username_column: "username"
      password_column: "password"
      extra_attributes:
        email: "email_database_column"
        fullname: "displayname_database_column"

Trong ví dụ trên, CASino sẽ tìm kiếm users trong bảng users. Cột username chứa chứa các usernames và password chứa passwords tương ứng.

  • Parameters

Dưới đây là paramters mặc định, có thể được viết đè lên trong config/cas.yml

frontend:
  sso_name: 'CASinoApp'
  footer_text: 'Powered by <a href="http://casino.rbcas.com/">CASino</a>'
login_ticket:
  lifetime: 600
ticket_granting_ticket:
  lifetime: 86400
  lifetime_long_term: 864000
service_ticket:
  lifetime_unconsumed: 300
  lifetime_consumed: 86400
  single_sign_out_notification:
    timeout: 10
proxy_ticket:
  lifetime_unconsumed: 300
  lifetime_consumed: 86400
two_factor_authenticator:
  lifetime_inactive: 300
  drift: 30

Limit allowed services

# if you are in production, execute the following command first:
#export RAILS_ENV=production

bundle exec rake casino:service_rule:flush           # Delete all service rules.
bundle exec rake casino:service_rule:list            # List all service rules.
bundle exec rake casino:service_rule:delete[$ID]     # Remove a service rule.

bundle exec rake casino:service_rule:add[$NAME,$URL] # Add a service rule (prefix the url parameter with "regex:" to add a regular expression)
# Allow all HTTPS services:
bundle exec rake casino:service_rule:add["HTTPS","regex:^https:"]
# Allow a domain:
bundle exec rake casino:service_rule:add["example.org","regex:^https?://example.org/"]
# Allow exactly one page:
bundle exec rake casino:service_rule:add["example.com","https://example.com/"]

Tổng kết

Hy vọng qua bài viết này, mọi người có thể phần nào nắm được về gem CASino của Rails - một giải pháp cho Single sign-on.

Bài viết được dịch từ CASino Documentation