| | 1 | |
| | 2 | Correspondence with Adirondack indicates they can rely on CAS for authN. Adirondack provided a file implementing CAS authentication. This file replaces the stock distribution file login_student.cfm: |
| | 3 | |
| | 4 | On Tue, 15 Mar 2011, at 10:51 , Michael J. Sale <msale@adirondacksolutions.com> wrote: |
| | 5 | |
| | 6 | >... I have attached the CAS authentication script which would replace your current myhousing/security/login_student_local.cfm file. I have also attached a login failure page for your convenience. The CAS script is pretty well commented, but please feel free to ask for any clarification you might need. |
| | 7 | |
| | 8 | >Thanks again, |
| | 9 | >Michael J. Salé | Director, Implementation & Training Services |
| | 10 | >Adirondack Solutions, Inc. |
| | 11 | >P: 908.725.8869 x202 | F: 866.523.7270 |
| | 12 | >email: msale@adirondacksolutions.com |
| | 13 | |
| | 14 | |
| | 15 | |
| | 16 | {{{ |
| | 17 | <!------------------------------------------------------------------------------ |
| | 18 | TITLE: Central Authentication Server Authentication - CAS/Jasig |
| | 19 | CREATED: 10/19/10 |
| | 20 | SUMMARY: Authenticates student against CAS. |
| | 21 | -------------------------------------------------------------------------------> |
| | 22 | |
| | 23 | <CFPARAM name="Session.StudentNumber" default=""> |
| | 24 | |
| | 25 | <CFLOCK scope="Session" type="ReadOnly" timeout="30" throwontimeout="no"> |
| | 26 | <CFSET MM_Username=Iif(IsDefined("Session.MM_Username"),"Session.MM_Username",DE(""))> |
| | 27 | <CFSET MM_UserAuthorization=Iif(IsDefined("Session.MM_UserAuthorization"),"Session.MM_UserAuthorization",DE(""))> |
| | 28 | </CFLOCK> |
| | 29 | |
| | 30 | <!--- Insert name of CAS Server at your location ---> |
| | 31 | <CFSET CAS_Server = "https://casserver.school.edu/cas/"> |
| | 32 | |
| | 33 | <!--- Insert public name of IIS Server hosting this script |
| | 34 | Note: CGI.HTTP_HOST or anything based on the HTTP "Host" header should NOT be used; |
| | 35 | this header is supplied by the client and isn't trusted. ---> |
| | 36 | <CFSET MyServer = "https://housingserver.school.edu/myhousing/security/"> |
| | 37 | |
| | 38 | <!--- See if already logged on ---> |
| | 39 | <CFIF MM_Username EQ ""> |
| | 40 | <!--- Check for ticket returned by CAS redirect ---> |
| | 41 | <CFSET ticket=Iif(IsDefined("URL.ticket"),"URL.ticket",DE(""))> |
| | 42 | <CFIF ticket EQ ""> |
| | 43 | <!--- No session, no ticket, Redirect to CAS Logon page ---> |
| | 44 | <CFSET casurl = #CAS_Server# & "login?" & "service=" & #MyServer# & "login_student_local.cfm"> |
| | 45 | <CFLOCATION url="#casurl#" addtoken="no"> |
| | 46 | <CFELSE> |
| | 47 | <!--- Back from CAS, validate ticket and get userid ---> |
| | 48 | <CFSET casurl = #CAS_Server# & "validate?ticket=" & #URL.ticket# & "&" & "service=" & MyServer & "login_student_local.cfm"> |
| | 49 | <CFHTTP url="#casurl#" method="get"></CFHTTP> |
| | 50 | <CFSET answer = findnocase("yes", cfhttp.filecontent)> |
| | 51 | |
| | 52 | <CFIF answer IS 1> |
| | 53 | <CFSET thing = cfhttp.filecontent> |
| | 54 | <CFSET thing = replace(thing, "yes", "")> |
| | 55 | <CFELSE> |
| | 56 | <CFSET session.message = "You could not be logged in."> |
| | 57 | <CFLOCATION url="login_student_url.cfm"> |
| | 58 | </CFIF> |
| | 59 | |
| | 60 | <CFSET NetId = #lcase(thing)#> |
| | 61 | <CFSET Session.NetID = #lcase(thing)#> |
| | 62 | |
| | 63 | <!--- You can set the Session.StudentNumber to a field returned from CAS, |
| | 64 | or see below to do a crosswalk lookup.---> |
| | 65 | <!---<CFSET Session.StudentNumber = #Refer to the variable here coing back from CAS#> ---> |
| | 66 | |
| | 67 | <!--- If Session.StudentNumber is empty at the point, something went wrong. ---> |
| | 68 | <CFIF Session.StudentNumber EQ ""> |
| | 69 | <CFLOCATION url="accessdenied.cfm"> |
| | 70 | <CFELSE> |
| | 71 | <!--- Else, send them on their way. ---> |
| | 72 | <CFLOCATION url="../index.cfm"> |
| | 73 | </CFIF> |
| | 74 | </CFIF> |
| | 75 | </CFIF> |
| | 76 | |
| | 77 | <!--- If you need to perform a crosswalk lookup, do it here to set StudentNumber. |
| | 78 | If you are returning the student's ID from CAS, you can set Session.StudentNumber to that field. ---> |
| | 79 | <!--- |
| | 80 | <CFQUERY datasource="A_CROSSWALK_SOURCE" name="qGetID"> |
| | 81 | SELECT SOMETHING |
| | 82 | FROM ATABLE |
| | 83 | WHERE ID = '#Session.NetID#' |
| | 84 | </CFQUERY> |
| | 85 | |
| | 86 | <CFIF NOT qGetID.RecordCount> |
| | 87 | <CFLOCATION url="accessdenied.cfm"> |
| | 88 | <CFELSE> |
| | 89 | <CFSET Session.StudentNumber = qGetID.StudentNumber> |
| | 90 | <CFLOCATION url="../index.cfm" addtoken="no"> |
| | 91 | </CFIF> |
| | 92 | ---> |
| | 93 | |
| | 94 | |
| | 95 | }}} |