Skip to content

Commit 7f891c0

Browse files
committed
add cas protocol overview
1 parent 6ed905f commit 7f891c0

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

examples/single sign on/cas/README.md

+44
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,50 @@ To use this CAS client in your own SQLPage application, you need to follow these
3838
> `sqlpage.environment_variable('CAS_ROOT_URL')` with `(SELECT cas_root_url FROM cas_config)`
3939
> in the `login.sql` and `redirect_handler.sql` files.
4040
41+
## CAS v3 Authentication Flow, step by step
42+
43+
### Login
44+
The client (usually a web browser) requests a resource from the application (client service).
45+
The application redirects the client to the CAS server with a service URL (the URL to which CAS should return the user after authentication).
46+
47+
### CAS Server Authentication
48+
The CAS server presents a login form.
49+
The user submits their credentials (username and password).
50+
Upon successful authentication, the CAS server redirects the user back to the application with a service ticket (ST) appended to the service URL.
51+
52+
### Service Ticket Validation
53+
The application receives the service ticket and makes a back-channel request to the CAS server to validate the service ticket.
54+
The CAS server responds with a success or failure. If successful, it also returns the user's attributes (such as username, email, etc.).
55+
56+
### User Session
57+
Upon successful validation, the application creates a session for the user and grants access to the requested resource.
58+
59+
### CAS v3 Pseudocode Implementation
60+
61+
```plaintext
62+
function authenticateUser(serviceUrl):
63+
if userNotLoggedIn():
64+
redirectToCasServer(serviceUrl)
65+
66+
function redirectToCasServer(serviceUrl):
67+
casLoginUrl = "https://cas.example.com/login?service=" + urlEncode(serviceUrl)
68+
redirect(casLoginUrl)
69+
70+
function casCallback(request):
71+
serviceTicket = request.getParameter("ticket")
72+
if serviceTicket is not None:
73+
validationUrl = "https://cas.example.com/serviceValidate?ticket=" + serviceTicket + "&service=" + urlEncode(serviceUrl)
74+
validationResponse = httpRequest(validationUrl)
75+
if validateResponse(validationResponse):
76+
userAttributes = extractAttributes(validationResponse)
77+
createUserSession(userAttributes)
78+
redirectToService(serviceUrl)
79+
else:
80+
authenticationFailed()
81+
else:
82+
error("Invalid service ticket.")
83+
```
84+
4185
## Notes
4286
4387
- This implementation uses the CAS 3.0 protocol. If your CAS server uses a different version of the protocol, you may need to modify the code (the ticket validation URL in redirect_handler.sql in particular).

0 commit comments

Comments
 (0)