# IMPORTANT NOTE ABOUT YAML CONFIGURATION FILES # ---> Be sure to use spaces instead of tabs for indentation. YAML is # white-space sensitive! ##### SERVER SETUP ################################################################ # There are several ways to run RubyCAS-Server: # # webrick -- stand-alone WEBrick server; should work out-of-the-box; this is # the default method, but probably not suited for high-traffic usage # mongrel -- stand-alone Mongrel server; fast, but you'll need to install # and compile Mongrel and run it behind an https reverse proxy like # Pound or Apache 2.2's mod_proxy (since Mongrel cannot serve out # over SSL on its own). # passenger -- served out by Apache via the mod_rails/mod_rack module # (see http://www.modrails.com/) # # The following are exampe configurations for each of these three methods: # ### ### WEBrick example ### # WEBrick is a simple, all-Ruby web server. This is the easiest method for running # RubyCAS-Server. All you need is an SSL certificate (enter its path under the # ssl_cert option). WEBrick is fine for sites with low to medium traffic, but for # high-performance scenarios you may want to look into deploying using Mongrel # or Passenger. server: webrick port: 443 ssl_cert: /path/to/your/ssl.pem # If your private key is separate from cert #ssl_key: /path/to/your/private_key.pem # By default the login page will be available at the root path # (e.g. https://login.example.net/). The uri_path option lets you serve it from a # different path (e.g. https://login.example.net/cas). #uri_path: /cas # This lets you bind the server to a specific address. Use 0.0.0.0 to listen on # all available interfaces (this is the default). #bind_address: 0.0.0.0 ### ### Mongrel example ### # Mongrel is much faster than WEBrick, but there are two caveats: # 1. Since Mongrel can't serve out encrypted HTTP on its own (and CAS requires this), # you will have to set up a reverse proxy like Pound or Apache's mod_proxy and # route through it requests to the Mongrel server. So for example, # your Pound server will receive all of the requests to RubyCAS-Server on port 443, # and forward them to the Mongrel server listening on port 11011. # 2. Some of Mongrel's components are compiled into native binaries, so if you are # installing on Linux, make sure you have all of the standard build tools # available. The binaries should be automatically compiled for you when you # install the mogrel gem (if you're runnings Windows, pre-compiled # binaries will be downloaded and installed, so don't worry about this). #server: mongrel #port: 110011 # Bind the server to a specific address. Use 0.0.0.0 to listen on all # available interfaces (this is the default). #bind_address: 0.0.0.0 ### Reverse proxy configuration examples # If you're using mod_proxy, your Apache vhost config should look something like this: # # Listen 443 # # ServerAdmin admin@example.net # ServerName login.example.net # # SSLEngine On # SSLCertificateFile /etc/apache2/ssl.crt/example.pem # # # Don't do forward proxying, we only want reverse proxying # ProxyRequests Off # # # Order allow,deny # Allow from all # BalancerMember http://127.0.0.1:11011 # # # # For Pound, the config should be something like: # # ListenHTTPS # Address 0.0.0.0 # Port 11011 # Cert "/etc/ssl/example.pem" # # Service # BackEnd # Address localhost # Port 443 # End # End # End ### ### Phusion Passenger (running under Apache configured for SSL) ### # No additional configuration is requried to run RubyCAS-Server under # passsenger. Just follow the normal instructions for a Passenger app # (see http://www.modrails.com/). # # Here's an example Apache vhost config for RubyCAS-Server and Passenger: # # Listen 442 # # ServerAdmin admin@example.net # ServerName login.example.net # # SSLEngine On # SSLCertificateFile /etc/apache2/ssl.crt/example.pem # # RailsAutoDetect off # # DocumentRoot /usr/lib/ruby/gems/1.8/gems/rubycas-server-0.8.0/public # # # AllowOverride all # Allow from all # # # ##### DATABASE ################################################################# # Set up the database connection. Make sure that this database is secure! # # By default, we use MySQL, since it is widely used and does not require any # additional # ruby libraries besides ActiveRecord. # # With MySQL, your config would be something like the following: # (be sure to create the casserver database in MySQL beforehand, # i.e. `mysqladmin -u root create casserver`) database: adapter: mysql database: casserver username: root password: host: localhost # # Instead of MySQL you can use SQLite3, PostgreSQL, MSSQL, or anything else # supported by ActiveRecord. # # With SQLite3 (which does not require a separate database server), your # configuration would look something like the following (don't forget to install # the sqlite3-ruby gem beforehand!): #database: # adapter: sqlite3 # dbfile: /var/lib/casserver.db ##### AUTHENTICATION ########################################################### # Configure how username/passwords are validated. # # !!! YOU MUST CONFIGURE AT LEAST ONE OF THESE AUTHENTICATION METHODS !!! # # There are several built-in methods for authentication: # SQL, ActiveDirectory, LDAP, and GoogleAccounts. If none of these work for you, # it is relatively easy to write your own custom Authenticator class (see below). # # === SQL Authentication ======================================================= # # The simplest method is to validate against a SQL database. This assumes # that all of your users are stored in a table that has a 'username' column # and a 'password' column. When the user logs in, CAS connects to this database # and looks for a matching username/password in the users table. If a matching # username and password is found, authentication is successful. # # If you prefer to have your passwords stored in an encrypted form, have a # look at the SQLEncrypted authenticator: # http://code.google.com/p/rubycas-server/wiki/UsingTheSQLEncryptedAuthenticator # # If your users table stores passwords with MD5 hashing (for example as with # Drupal) try using the SQLMd5 version of the SQL authenticator. # # Example: # #authenticator: # class: CASServer::Authenticators::SQL # database: # adapter: mysql # database: some_database_with_users_table # username: root # password: # host: localhost # user_table: users # username_column: username # password_column: password # # When replying to a CAS client's validation request, the server will normally # provide the client with the authenticated user's username. However it is # possible for the server to provide the client with additional attributes. # You can configure the SQL authenticator to provide data from additional # columns in the users table by listing the names of the columns under the # 'extra_attributes' option. Note though that this functionality is experimental. # It should work with RubyCAS-Client, but may or may not work with other CAS # clients. # # For example, with this configuration, the 'full_name' and 'access_level' # columns will be provided to your CAS clients along with the username: # #authenticator: # class: CASServer::Authenticators::SQL # database: # adapter: mysql # database: some_database_with_users_table # user_table: users # username_column: username # password_column: password # extra_attributes: full_name, access_level # # # === Google Authentication ==================================================== # # The Google authenticator allows users to log in to your CAS server using # their Google account credentials (i.e. the same email and password they # would use to log in to Google services like Gmail). This authenticator # requires no special configuration -- just specify its class name: # #authenticator: # class: CASServer::Authenticators::Google # # Note that as with all authenticators, it is possible to use the Google # authenticator alongside other authenticators. For example, CAS can first # attempt to validate the account with Google, and if that fails, fall back # to some other local authentication mechanism. # # For example: # #authenticator: # - class: CASServer::Authenticators::Google # - class: CASServer::Authenticators::SQL # database: # adapter: mysql # database: some_database_with_users_table # user: root # password: # host: localhost # user_table: user # username_column: username # password_column: password # # # === ActiveDirectory Authentication =========================================== # # This method authenticates against Microsoft's Active Directory using LDAP. # You must configure the ActiveDirectory server, and base DN. The port number # and LDAP filter are optional. You must also enter a CN and password # for a special "authenticator" user. This account is used to log in to # the ActiveDirectory server and search LDAP. This does not have to be an # administrative account -- it only has to be able to search for other # users. # # Note that the auth_user parameter must be the user's CN (Common Name). # In Active Directory, the CN is genarally the user's full name, which is usually # NOT the same as their username (sAMAccountName). # # For example: # #authenticator: # class: CASServer::Authenticators::ActiveDirectoryLDAP # ldap: # host: ad.example.net # port: 389 # base: dc=example,dc=net # filter: (objectClass=person) # auth_user: authenticator # auth_password: itsasecret # # A more complicated example, where the authenticator will use TLS encryption, # will ignore users with disabled accounts, and will pass on the 'cn' and 'mail' # attributes to CAS clients: # #authenticator: # class: CASServer::Authenticators::ActiveDirectoryLDAP # ldap: # host: ad.example.net # port: 636 # base: dc=example,dc=net # filter: (objectClass=person) & !(msExchHideFromAddressLists=TRUE) # auth_user: authenticator # auth_password: itsasecret # encryption: simple_tls # extra_attributes: cn, mail # # It is possible to authenticate against Active Directory without the # authenticator user, but this requires that users type in their CN as # the username rather than typing in their sAMAccountName. In other words # users will likely have to authenticate by typing their full name, # rather than their username. If you prefer to do this, then just # omit the auth_user and auth_password values in the above example. # # # === LDAP Authentication ====================================================== # # This is a more general version of the ActiveDirectory authenticator. # The configuration is similar, except you don't need an authenticator # username or password. The following example has been reported to work # for a basic OpenLDAP setup. # #authenticator: # class: CASServer::Authenticators::LDAP # ldap: # host: ldap.example.net # port: 389 # base: dc=example,dc=net # username_attribute: uid # filter: (objectClass=person) # # If you need more secure connections via TSL, specify the 'encryption' # option and change the port. This example also forces the authenticator # to connect using a special "authenticator" user with the given # username and password (see the ActiveDirectoryLDAP authenticator # explanation above): # #authenticator: # class: CASServer::Authenticators::LDAP # ldap: # host: ldap.example.net # port: 636 # base: dc=example,dc=net # filter: (objectClass=person) # encryption: simple_tls # auth_user: cn=admin,dc=example,dc=net # auth_password: secret # # If you need additional data about the user passed to the client (for example, # their 'cn' and 'mail' attributes, you can specify the list of attributes # under the extra_attributes config option: # #authenticator: # class: CASServer::Authenticators::LDAP # ldap: # host: ldap.example.net # port: 389 # base: dc=example,dc=net # filter: (objectClass=person) # extra_attributes: cn, mail # # Note that the above functionality is somewhat limited by client compatibility. # See the SQL authenticator notes above for more info. # # # === Custom Authentication ==================================================== # # It should be relatively easy to write your own Authenticator class. Have a look # at the built-in authenticators in the casserver/authenticators directory. Your # authenticator should extend the CASServer::Authenticators::Base class and must # implement a validate() method that takes a single hash argument. When the user # submits the login form, the username and password they entered is passed to # validate() as a hash under :username and :password keys. In the future, this # hash might also contain other data such as the domain that the user is logging # in to. # # To use your custom authenticator, specify it's class name and path to the # source file in the authenticator section of the config. Any other parameters # you specify in the authenticator configuration will be passed on to the # authenticator and made availabe in the validate() method as an @options hash. # # Example: # #authenticator: # class: FooModule::MyCustomAuthenticator # source: /path/to/source.rb # option_a: foo # another_option: yeeha # # === Multiple Authenticators ================================================== # # If you need to have more than one source for authentication, such as an LDAP # directory and a database, you can use multiple authenticators by making # :authenticator an array of authenticators. # #authenticator: # - # class: CASServer::Authenticators::ActiveDirectoryLDAP # ldap: # host: ad.example.net # port: 389 # base: dc=example,dc=net # filter: (objectClass=person) # - # class: CASServer::Authenticators::SQL # database: # adapter: mysql # database: some_database_with_users_table # user: root # password: # host: localhost # user_table: user # username_column: username # password_column: password # # During authentication, the user credentials will be checked against the first # authenticator and on failure fall through to the second authenticator. # ##### LOOK & FEEL ############################################################## # Set the path to the theme directory that determines how your CAS pages look. # # Custom themes are not well supported yet, but will be in the near future. In # the meantime, if you want to create a custom theme, you can create a # subdirectory under the CASServer's themes dir (for example, # '/usr/lib/ruby/1.8/gems/casserver-xxx/lib/themes', if you installed CASServer # on Linux as a gem). A theme is basically just a theme.css file that overrides # the themes/cas.css styles along with a collection of image files # like logo.png and bg.png. # # By default, we use the 'simple' theme which you can find in themes/simple. theme: simple # The name of your company/organization. This will show up on the login page. organization: CAS # A short bit of text that shows up on the login page. You can make this blank # if you prefer to have no extra text shown at the bottom of the login box. infoline: Powered by RubyCAS-Server # Custom views file. Overrides methodes in lib/casserver/views.rb #custom_views_file: /path/to/custom/views.rb ##### LOCALIZATION (L10N) ####################################################### # The server will attempt to detect the user's locale and show text in the # appropriate language based on: # # 1. The 'lang' URL parameter (if any) # 2. The 'lang' cookie (if any) # 3. The HTTP_ACCEPT_LANGUAGE header supplied by the user's browser. # 4. The HTTP_USER_AGENT header supplied by the user's browser. # # If the locale cannot be established based on one of the above checks (in the # shown order), then the below 'default_locale' option will be used. # # The format is the same as standard linux locales (langagecode_COUNTRYCODE): # # ru_RU - Russian, Russia # eo_AQ - Esperanto, Antarctica # # It will also work if you leave out the region (i.e. just "ru" for Russian, # "eo" for Esperanto). # # If you are interested in contributing new translations or have corrections # to the existing translations, see # http://code.google.com/p/rubycas-server/wiki/HowToContribueTranslations # default_locale: en ##### LOGGING ################################################################## # Configure general logging. This log is where you'll want to look in case of # problems. # # You may want to change the file to something like /var/log/casserver.log # Set the level to DEBUG if you want more detailed logging. log: file: /var/log/casserver.log level: INFO # If you want full database logging, uncomment this next section. # Every SQL query will be logged here. This is useful for debugging database # problems. # #db_log: # file: /var/log/casserver_db.log ##### SINGLE SIGN-OUT ########################################################## # When a user logs in to a CAS-enabled client application, that application # generally opens its own local user session. When the user then logs out # through the CAS server, each of the CAS-enabled client applications need # to be notified so that they can close their own local sessions for that user. # # Up until recently this was not possible within CAS. However, a method for # performing this notification was recently added to the protocol (in CAS 3.1). # This works exactly as described above -- when the user logs out, the CAS # server individually contacts each client service and notifies it of the # logout. Currently not all client applications support this, so this # behaviour is disabled by default. To enable it, uncomment the following # configuration line. Note that currently it is not possible to enable # or disable single-sign-out on a per-service basis, but this functionality # is planned for a future release. #enable_single_sign_out: true ##### OTHER #################################################################### # You can set various ticket expiry times (specify the value in seconds). # Expired login and service tickets are no longer usable this many seconds after # they are created. (Defaults to 5 minutes) #login_ticket_expiry: 300 #service_ticket_expiry: 300 # Proxy- and ticket-granting tickets do not expire -- normally they are made # invalid only when the user logs out. But the server must periodically delete # them to prevent buildup of stale data. PGTs and TGTs will be deleted during # server startup if they are this many seconds old. (Defaults to 48 hours) #proxy_granting_ticket_expiry: 172800 #ticket_granting_ticket_expiry: 172800 # If you would prefer that ticket-granting ticket expiry be enforced (in effect # limiting the maximum length of a session), you can set expire_sessions to true. #expire_sessions: false # If you want the usernames entered on the login page to be automatically # downcased (converted to lowercase), enable the following option. When this # option is set to true, if the user enters "JSmith" as their username, the # system will automatically # convert this to "jsmith". #downcase_username: true