Overview

The Central Authentication Service (CAS) is a protocol that allows a single web site to act as the authentication broker for service providers. Twisted is an asyncronous networking library for the Python programming language. Since prefixing project names with “twisted” is somewhat long-ish, Twisted Python projects tend toward using the “tx” prefix. So “txcas” is an implementation of a CAS server using the Twisted Python library.

Features

  • Implements the CAS Protocol v3.0 required sections (1-3).
  • Easy to start/stop service that listens and responds to incoming requests. No external web server or web application container required.
  • Open source Python code making heavy use of the Twisted networking library.
  • Flexible plugin architecture, allowing customization of major architectural components.
  • Plugins for Authentication (file, unix, LDAP, client x509), User Realms (basic, LDAP), Ticket Stores (in-memory, CouchDB), Service Managers (JSON), and View Providers (Jinja2 templates).
  • Simple configuration.
  • Runs on a Raspberry Pi!

Why Another CAS Server?

The Apereo Foundation already maintains the reference CAS server implementation. It is robust, well tested, reliable, flexible software that has a vibrant community behind it. So why another server implementation?

Ultimately, the reason this project exists is that I unapologetically love programming in Python! It has been said the Python “fits your brain”, and in my case, I most certainly agree. I am also a big fan of the Twisted networking library and asynchronous I/O.

I recognize many of the benefits of the Java programming language and its associated tool chain, but it is not my software environment of choice. I found a basic CAS server written in Python on GitHub. I forked it, and started this project.

Goals

My goals for this project are as follows:

  • Produce a working, production quality CAS server that implements all the required features of the CAS protocol.
  • Provide a flexible and customizable plugin architecture. Don’t try to include every option in the core server.
  • Keep the code base simple to learn and understand.
  • Keep the administration of the service simple to use.