rubycas-client 2.0.1 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG.txt +1 -114
- data/History.txt +162 -0
- data/Manifest.txt +8 -1
- data/{README.txt → README.rdoc} +76 -29
- data/Rakefile +7 -0
- data/examples/merb/README.textile +12 -0
- data/examples/merb/Rakefile +35 -0
- data/examples/merb/merb.thor +2020 -0
- data/examples/merb/merb_auth_cas.rb +67 -0
- data/examples/merb/spec/spec_helper.rb +24 -0
- data/lib/casclient/client.rb +65 -16
- data/lib/casclient/frameworks/merb/filter.rb +105 -0
- data/lib/casclient/frameworks/merb/strategy.rb +110 -0
- data/lib/casclient/frameworks/rails/filter.rb +220 -35
- data/lib/casclient/responses.rb +9 -0
- data/lib/casclient/version.rb +2 -2
- metadata +22 -5
data/CHANGELOG.txt
CHANGED
@@ -1,114 +1 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
== Version 2.0.1 :: 2008-02-27
|
4
|
-
|
5
|
-
* The Rails filter no longer by default redirects to the CAS server on
|
6
|
-
every request. This restores the behaviour of RubyCAS-Client 1.x.
|
7
|
-
In other words, if a session[:cas_user] value exists, the filter
|
8
|
-
will assume that the user is authenticated without going through the
|
9
|
-
CAS server. This behaviour can be disabled (so that a CAS re-check is
|
10
|
-
done on every request) by setting the 'authenticate_on_every_request'
|
11
|
-
option to true. See the "Re-authenticating on every request" section
|
12
|
-
in the README.txt for details.
|
13
|
-
|
14
|
-
== Version 2.0.0 :: 2008-02-14
|
15
|
-
|
16
|
-
* COMPLETE RE-WRITE OF THE ENTIRE CLIENT FROM THE GROUND UP. Oh yes.
|
17
|
-
* Core client has been abstracted out of the Rails adapter. It should now
|
18
|
-
be possible to use the client in other frameworks (e.g. Camping).
|
19
|
-
* Configuration syntax has completely changed. In other words, your old
|
20
|
-
rubycas-client-1.x configuration will no longer work. See the README
|
21
|
-
for details.
|
22
|
-
* Added support for reading extra attributes from the CAS response (i.e. in
|
23
|
-
addition to just the username). However currently this is somewhat useless
|
24
|
-
since RubyCAS-Server does not yet provide a method for adding extra
|
25
|
-
attributes to the responses it generates.
|
26
|
-
|
27
|
-
== Version 1.1.0 :: 2007-12-21
|
28
|
-
|
29
|
-
* Fixed serious bug having to do with logouts. You can now end the
|
30
|
-
CAS session on the client-side (i.e. force the client to re-authenticate)
|
31
|
-
by setting session[:casfilteruser] = nil.
|
32
|
-
* Added new GatewayFilter. This is identical to the normal Filter but
|
33
|
-
has the gateway option set to true by default. This should make
|
34
|
-
using the gateway option easier.
|
35
|
-
* The CAS::Filter methods are now properly documented.
|
36
|
-
* Simplified guess_service produces better URLs when redirecting to the CAS
|
37
|
-
server for authentication and the service URL is not explicitly specified.
|
38
|
-
[delagoya]
|
39
|
-
* The correct method for overriding the service URL for the client is now
|
40
|
-
properly documented. You should use service_url=, as server_name= no longer
|
41
|
-
works and instead generates a warning message.
|
42
|
-
* logout_url() now takes an additional 'service' parameter. If specified, this
|
43
|
-
URL will be passed on to the CAS server as part of the logout URL.
|
44
|
-
|
45
|
-
== Version 1.0.0 :: 2007-07-26
|
46
|
-
|
47
|
-
* RubyCAS-Client has matured to the point where it is probably safe to
|
48
|
-
take it out of beta and release version 1.0.
|
49
|
-
* Non-SSL CAS URLs will now work. This may be useful for demo purposes,
|
50
|
-
but certainly shouldn't be used in production. The client automatically
|
51
|
-
disables SSL if the CAS URL starts with http (rather than https). [rubywmq]
|
52
|
-
|
53
|
-
== Version 0.12.0
|
54
|
-
|
55
|
-
* Prior to redirecting to the CAS login page, the client now stores the
|
56
|
-
current service URI in a session variable. This value is used to
|
57
|
-
validate the service ticket after the user comes back from the CAS
|
58
|
-
server's login page. This should address issues where redirection
|
59
|
-
from the CAS server resulted in a slightly different URI from the original
|
60
|
-
one used prior to login redirection (for example due to variations in the
|
61
|
-
way routing rules are applied by the server).
|
62
|
-
* The client now handles malformed CAS server responses more gracefully.
|
63
|
-
This makes debugging a malfunctioning CAS server somewhat easier.
|
64
|
-
* When receiving a proxy-granting ticket, the cas_proxy_callback_controller
|
65
|
-
can now take a parameter called 'pgt' (which is what ought to be used
|
66
|
-
according to the published CAS spec) or 'pgtId' (which is what the JA-SIG
|
67
|
-
CAS server uses).
|
68
|
-
* Logging has been somewhat quieted down. Many messages that were previously
|
69
|
-
logged as INFO are now logged as DEBUG.
|
70
|
-
|
71
|
-
== Version 0.11.0
|
72
|
-
|
73
|
-
* Added this changelog to advise users of major changes to the library.
|
74
|
-
|
75
|
-
* Large chunks of the library have been re-written. Beware of the possibility
|
76
|
-
of new bugs (although the re-write was meant to fix a whole slew of existing
|
77
|
-
bugs, so you're almost certainly better off upgrading).
|
78
|
-
|
79
|
-
* service and targetService parameters in requests are now properly URI-encoded,
|
80
|
-
so the filter should behave properly when your service has query parameters.
|
81
|
-
Thanks sakazuki for pointing out the problem.
|
82
|
-
|
83
|
-
* You can now force the CAS client to re-authenticate itself with the CAS server
|
84
|
-
(i.e. override the authentication stored in the session) by providing a new
|
85
|
-
service ticket in the URI. In other words, the client will authenticate with
|
86
|
-
CAS if: a) you have a 'ticket' parameter in the URI, and there is currently no
|
87
|
-
authentication info in the session, or b) you have a 'ticket' parameter in the
|
88
|
-
URI and this ticket is different than the ticket that was used to authenticat
|
89
|
-
the existing session. This is especially useful when you are using CAS proxying,
|
90
|
-
since it allows you to force re-authentication in proxied applications (for
|
91
|
-
example, when the user has logged out and a new user has logged in in the parent
|
92
|
-
proxy-granting application).
|
93
|
-
|
94
|
-
* If your service URI has a 'ticket' parameter, it will now be automatically
|
95
|
-
removed when passing the service as a parameter in any CAS request. This is
|
96
|
-
done because at least some CAS servers will happily accept a service URI with
|
97
|
-
a 'ticket' parameter, which will result in a URI with multiple 'ticket'
|
98
|
-
parameters once you are redirected back to CAS (and that in turn can result
|
99
|
-
in an endless redirection loop).
|
100
|
-
|
101
|
-
* Logging has been greatly improved, which should make debugging your CAS
|
102
|
-
installation much easier. Look for the logs under log/cas_client_RAILS_ENV.log
|
103
|
-
|
104
|
-
* When you install RubyCAS-Client as a Rails plugin, it will now by default
|
105
|
-
use a custom logger. You can change this by explicitly setting your own
|
106
|
-
logger in your environment.rb, or by modifying the plugin's init.rb.
|
107
|
-
|
108
|
-
* CasProxyCallbackController no longer checks to make sure that the incoming
|
109
|
-
request is secure. The check is impossible since the secure header is not
|
110
|
-
passed on by at least some reverse proxies (like Pound), and if you are using
|
111
|
-
the callback controller then you are almost certainly also using a reverse
|
112
|
-
proxy.
|
113
|
-
|
114
|
-
* Cleaned up and updated documentation, fixed some example code.
|
1
|
+
See History.txt
|
data/History.txt
CHANGED
@@ -0,0 +1,162 @@
|
|
1
|
+
= RubyCAS-Client Changelog
|
2
|
+
|
3
|
+
== Version 2.1.0 :: 2009-08-18
|
4
|
+
|
5
|
+
* New functionality:
|
6
|
+
* Added an adapter for the Merb framework. Thanks to Andrew O'Brien and
|
7
|
+
Antono Vasiljev.
|
8
|
+
* Implemented single-sign-out functionality. The client will now intercept
|
9
|
+
single-sign-out requests and deal with them appropriately if the
|
10
|
+
:enable_single_sign_out config option is set to true. This is currently
|
11
|
+
disabled by default. (Currently this is only implemented for the Rails
|
12
|
+
adapter)
|
13
|
+
* Added logout method to Rails adapter to simplify the logout process. The
|
14
|
+
logout method resets the local Rails session and redirects to the CAS
|
15
|
+
logout page.
|
16
|
+
* Added login_url method to the Rails filter. This will return the login
|
17
|
+
URL for the current controller; useful when you want to show a "Login"
|
18
|
+
link in a gatewayed page for an unauthenticated user.
|
19
|
+
* Added cas_server_is_up? method to the client, as requested in issue #5.
|
20
|
+
* Extra user attributes are now automatically unserialized if the incoming data
|
21
|
+
is in YAML format.
|
22
|
+
|
23
|
+
* Changes to existing functionality:
|
24
|
+
* The 'service' parameter in the logout method has been renamed to
|
25
|
+
'destination' to better match the behaviour of other CAS clients. So for
|
26
|
+
example, when you call logout_url("http://foo.example"), the method will
|
27
|
+
now return "https://cas.example?destination=https%3A%2F%2Ffoo.example"
|
28
|
+
instead of the old "https://cas.example?service=https%3A%2F%2Ffoo.example".
|
29
|
+
RubyCAS-Server has been modified to deal with this as of version 0.6.0.
|
30
|
+
* We now accept HTTP responses from the CAS server with status code 422 since
|
31
|
+
RubyCAS-Server 0.7.0+ generates these in response to requests that are
|
32
|
+
processable but contain invalid CAS data (for example an invalid service
|
33
|
+
ticket).
|
34
|
+
* Some behind-the-scenes changes to the way previous authentication info is
|
35
|
+
reused by the Rails filter in subsequent requests (see the note below
|
36
|
+
in the 2.0.1 release). From the user's and integrator's point of view
|
37
|
+
there shouldn't be any obvious difference from 2.0.1.
|
38
|
+
* Redirection loop interception: The client now logs a warning message when it
|
39
|
+
believes that it is stuck in a redirection loop with the CAS server. If more
|
40
|
+
than three of these redirects occur within one second, the client will
|
41
|
+
redirect back to the login page with renew=1, forcing the user to try
|
42
|
+
authenticating again.
|
43
|
+
* Somewhat better handling and logging of errors resulting from CAS server
|
44
|
+
connection/response problems.
|
45
|
+
|
46
|
+
* Bug Fixes:
|
47
|
+
* Fixed bug where the the service/destination parameter in the logout url
|
48
|
+
would sometimes retain the 'ticket' value. The ticket is now automatically
|
49
|
+
stripped from the logout url.
|
50
|
+
* The client will no longer attempt to retrieve a PGT for an IOU that had
|
51
|
+
already been previously retrieved. [yipdw1]
|
52
|
+
|
53
|
+
* Misc:
|
54
|
+
* Added complete CAS client integration examples for Rails and Merb
|
55
|
+
applications under /examples.
|
56
|
+
|
57
|
+
== Version 2.0.1 :: 2008-02-27
|
58
|
+
|
59
|
+
* The Rails filter no longer by default redirects to the CAS server on
|
60
|
+
every request. This restores the behaviour of RubyCAS-Client 1.x.
|
61
|
+
In other words, if a session[:cas_user] value exists, the filter
|
62
|
+
will assume that the user is authenticated without going through the
|
63
|
+
CAS server. This behaviour can be disabled (so that a CAS re-check is
|
64
|
+
done on every request) by setting the 'authenticate_on_every_request'
|
65
|
+
option to true. See the "Re-authenticating on every request" section
|
66
|
+
in the README.txt for details.
|
67
|
+
|
68
|
+
== Version 2.0.0 :: 2008-02-14
|
69
|
+
|
70
|
+
* COMPLETE RE-WRITE OF THE ENTIRE CLIENT FROM THE GROUND UP. Oh yes.
|
71
|
+
* Core client has been abstracted out of the Rails adapter. It should now
|
72
|
+
be possible to use the client in other frameworks (e.g. Camping).
|
73
|
+
* Configuration syntax has completely changed. In other words, your old
|
74
|
+
rubycas-client-1.x configuration will no longer work. See the README
|
75
|
+
for details.
|
76
|
+
* Added support for reading extra attributes from the CAS response (i.e. in
|
77
|
+
addition to just the username). However currently this is somewhat useless
|
78
|
+
since RubyCAS-Server does not yet provide a method for adding extra
|
79
|
+
attributes to the responses it generates.
|
80
|
+
|
81
|
+
------------------------------------------------------------------------------
|
82
|
+
|
83
|
+
== Version 1.1.0 :: 2007-12-21
|
84
|
+
|
85
|
+
* Fixed serious bug having to do with logouts. You can now end the
|
86
|
+
CAS session on the client-side (i.e. force the client to re-authenticate)
|
87
|
+
by setting session[:casfilteruser] = nil.
|
88
|
+
* Added new GatewayFilter. This is identical to the normal Filter but
|
89
|
+
has the gateway option set to true by default. This should make
|
90
|
+
using the gateway option easier.
|
91
|
+
* The CAS::Filter methods are now properly documented.
|
92
|
+
* Simplified guess_service produces better URLs when redirecting to the CAS
|
93
|
+
server for authentication and the service URL is not explicitly specified.
|
94
|
+
[delagoya]
|
95
|
+
* The correct method for overriding the service URL for the client is now
|
96
|
+
properly documented. You should use service_url=, as server_name= no longer
|
97
|
+
works and instead generates a warning message.
|
98
|
+
* logout_url() now takes an additional 'service' parameter. If specified, this
|
99
|
+
URL will be passed on to the CAS server as part of the logout URL.
|
100
|
+
|
101
|
+
== Version 1.0.0 :: 2007-07-26
|
102
|
+
|
103
|
+
* RubyCAS-Client has matured to the point where it is probably safe to
|
104
|
+
take it out of beta and release version 1.0.
|
105
|
+
* Non-SSL CAS URLs will now work. This may be useful for demo purposes,
|
106
|
+
but certainly shouldn't be used in production. The client automatically
|
107
|
+
disables SSL if the CAS URL starts with http (rather than https). [rubywmq]
|
108
|
+
|
109
|
+
== Version 0.12.0
|
110
|
+
|
111
|
+
* Prior to redirecting to the CAS login page, the client now stores the
|
112
|
+
current service URI in a session variable. This value is used to
|
113
|
+
validate the service ticket after the user comes back from the CAS
|
114
|
+
server's login page. This should address issues where redirection
|
115
|
+
from the CAS server resulted in a slightly different URI from the original
|
116
|
+
one used prior to login redirection (for example due to variations in the
|
117
|
+
way routing rules are applied by the server).
|
118
|
+
* The client now handles malformed CAS server responses more gracefully.
|
119
|
+
This makes debugging a malfunctioning CAS server somewhat easier.
|
120
|
+
* When receiving a proxy-granting ticket, the cas_proxy_callback_controller
|
121
|
+
can now take a parameter called 'pgt' (which is what ought to be used
|
122
|
+
according to the published CAS spec) or 'pgtId' (which is what the JA-SIG
|
123
|
+
CAS server uses).
|
124
|
+
* Logging has been somewhat quieted down. Many messages that were previously
|
125
|
+
logged as INFO are now logged as DEBUG.
|
126
|
+
|
127
|
+
== Version 0.11.0
|
128
|
+
|
129
|
+
* Added this changelog to advise users of major changes to the library.
|
130
|
+
* Large chunks of the library have been re-written. Beware of the possibility
|
131
|
+
of new bugs (although the re-write was meant to fix a whole slew of existing
|
132
|
+
bugs, so you're almost certainly better off upgrading).
|
133
|
+
* service and targetService parameters in requests are now properly URI-encoded,
|
134
|
+
so the filter should behave properly when your service has query parameters.
|
135
|
+
Thanks sakazuki for pointing out the problem.
|
136
|
+
* You can now force the CAS client to re-authenticate itself with the CAS server
|
137
|
+
(i.e. override the authentication stored in the session) by providing a new
|
138
|
+
service ticket in the URI. In other words, the client will authenticate with
|
139
|
+
CAS if: a) you have a 'ticket' parameter in the URI, and there is currently no
|
140
|
+
authentication info in the session, or b) you have a 'ticket' parameter in the
|
141
|
+
URI and this ticket is different than the ticket that was used to authenticat
|
142
|
+
the existing session. This is especially useful when you are using CAS proxying,
|
143
|
+
since it allows you to force re-authentication in proxied applications (for
|
144
|
+
example, when the user has logged out and a new user has logged in in the parent
|
145
|
+
proxy-granting application).
|
146
|
+
* If your service URI has a 'ticket' parameter, it will now be automatically
|
147
|
+
removed when passing the service as a parameter in any CAS request. This is
|
148
|
+
done because at least some CAS servers will happily accept a service URI with
|
149
|
+
a 'ticket' parameter, which will result in a URI with multiple 'ticket'
|
150
|
+
parameters once you are redirected back to CAS (and that in turn can result
|
151
|
+
in an endless redirection loop).
|
152
|
+
* Logging has been greatly improved, which should make debugging your CAS
|
153
|
+
installation much easier. Look for the logs under log/cas_client_RAILS_ENV.log
|
154
|
+
* When you install RubyCAS-Client as a Rails plugin, it will now by default
|
155
|
+
use a custom logger. You can change this by explicitly setting your own
|
156
|
+
logger in your environment.rb, or by modifying the plugin's init.rb.
|
157
|
+
* CasProxyCallbackController no longer checks to make sure that the incoming
|
158
|
+
request is secure. The check is impossible since the secure header is not
|
159
|
+
passed on by at least some reverse proxies (like Pound), and if you are using
|
160
|
+
the callback controller then you are almost certainly also using a reverse
|
161
|
+
proxy.
|
162
|
+
* Cleaned up and updated documentation, fixed some example code.
|
data/Manifest.txt
CHANGED
@@ -2,11 +2,18 @@ CHANGELOG.txt
|
|
2
2
|
History.txt
|
3
3
|
LICENSE.txt
|
4
4
|
Manifest.txt
|
5
|
-
README.
|
5
|
+
README.rdoc
|
6
6
|
Rakefile
|
7
|
+
examples/merb/README.textile
|
8
|
+
examples/merb/Rakefile
|
9
|
+
examples/merb/merb.thor
|
10
|
+
examples/merb/merb_auth_cas.rb
|
11
|
+
examples/merb/spec/spec_helper.rb
|
7
12
|
init.rb
|
8
13
|
lib/casclient.rb
|
9
14
|
lib/casclient/client.rb
|
15
|
+
lib/casclient/frameworks/merb/filter.rb
|
16
|
+
lib/casclient/frameworks/merb/strategy.rb
|
10
17
|
lib/casclient/frameworks/rails/cas_proxy_callback_controller.rb
|
11
18
|
lib/casclient/frameworks/rails/filter.rb
|
12
19
|
lib/casclient/responses.rb
|
data/{README.txt → README.rdoc}
RENAMED
@@ -3,7 +3,10 @@
|
|
3
3
|
Author:: Matt Zukowski <matt AT roughest DOT net>; inspired by code by Ola Bini <ola.bini AT ki DOT se> and Matt Walker <mwalker AT tamu DOT edu>
|
4
4
|
Copyright:: (c) 2008 Urbacon Ltd.
|
5
5
|
License:: GNU Lesser General Public License v2.1 (LGPL 2.1)
|
6
|
-
|
6
|
+
Websites:: http://code.google.com/p/rubycas-client
|
7
|
+
http://github.com/gunark/rubycas-client
|
8
|
+
http://rubyforge.org/projects/rubycas-client
|
9
|
+
|
7
10
|
|
8
11
|
|
9
12
|
=== RubyCAS-Client is a Ruby client library for Yale's Central Authentication Service (CAS) protocol.
|
@@ -16,6 +19,10 @@ For general information about the open CAS protocol, please have a look at http:
|
|
16
19
|
If your organization does not already have a CAS server, you may be interested in RubyCAS-Client's sister project,
|
17
20
|
RubyCAS-Server[http://code.google.com/p/rubycas-server/].
|
18
21
|
|
22
|
+
The RubyCAS-Client package includes adapters for Rails and Merb, although the client library itself can be
|
23
|
+
adapted for other frameworks (for example an implementation for Camping is available via the Picnic[http://github.com/zuk/picnic/tree/master]
|
24
|
+
library).
|
25
|
+
|
19
26
|
|
20
27
|
== Getting help and reporting problems
|
21
28
|
|
@@ -23,13 +30,15 @@ If you need help, try posting to the RubyCAS discussion group at http://groups.g
|
|
23
30
|
|
24
31
|
To report problems, please use the Google Code issue tracker at http://code.google.com/p/rubycas-client/issues/list.
|
25
32
|
|
33
|
+
API documentation (i.e. the RDocs) are available at http://rubycas-client.rubyforge.org
|
34
|
+
|
26
35
|
|
27
36
|
== Installation
|
28
37
|
|
29
38
|
You can download the latest version of RubyCAS-Client from the project's rubyforge page at
|
30
39
|
http://rubyforge.org/projects/rubycas-client.
|
31
40
|
|
32
|
-
However, it
|
41
|
+
However, if you're using Rails, it's easier to install the CAS client as a plugin:
|
33
42
|
|
34
43
|
cd <your rails app>
|
35
44
|
./script/plugin install http://rubycas-client.googlecode.com/svn/trunk/rubycas-client
|
@@ -43,17 +52,27 @@ you always have the latest bleeding-edge version of RubyCAS-Client:
|
|
43
52
|
|
44
53
|
./script/plugin install -x http://rubycas-client.googlecode.com/svn/trunk/rubycas-client
|
45
54
|
|
55
|
+
With Rails 2.1 or newer, it is also possible to install the plugin directly from the bleeding-edge git repository:
|
56
|
+
|
57
|
+
./script/plugin install git://github.com/gunark/rubycas-client.git
|
46
58
|
|
47
59
|
== Usage Examples
|
48
60
|
|
49
|
-
|
50
|
-
|
61
|
+
If you'd rather jump right in, have a look at the example Rails and Merb applications pre-configured for CAS
|
62
|
+
authentication:
|
63
|
+
|
64
|
+
http://github.com/gunark/rubycas-client/tree/master/examples
|
65
|
+
|
66
|
+
|
67
|
+
Otherwise, continue reading for a step-by-step guide for integrating RubyCAS-Client with Rails:
|
68
|
+
|
51
69
|
|
52
70
|
==== Using RubyCAS-Client in Rails controllers
|
53
71
|
|
54
72
|
<i>Note that from this point on we are assuming that you have a working CAS server up and running!</i>
|
55
73
|
|
56
|
-
After installing RubyCAS-Client as a plugin (see above), add the following to your app's <tt>config/environment.rb</tt
|
74
|
+
After installing RubyCAS-Client as a plugin (see above), add the following to your app's <tt>config/environment.rb</tt>
|
75
|
+
(make sure that you put it at the bottom of the file, *after* the Rails Initializer):
|
57
76
|
|
58
77
|
CASClient::Frameworks::Rails::Filter.configure(
|
59
78
|
:cas_base_url => "https://cas.example.foo/"
|
@@ -76,6 +95,11 @@ filter. For example:
|
|
76
95
|
If you want to do something with this username (for example load a user record from the database), you can append another
|
77
96
|
filter method that checks for this value and does whatever you need it to do.
|
78
97
|
|
98
|
+
<b>Note:</b> If Rails complains about missing constants, try adding this before the CASClient configuration:
|
99
|
+
|
100
|
+
require 'casclient'
|
101
|
+
require 'casclient/frameworks/rails/filter'
|
102
|
+
|
79
103
|
|
80
104
|
==== A more complicated example
|
81
105
|
|
@@ -91,19 +115,19 @@ Here is a more complicated configuration showing most of the configuration optio
|
|
91
115
|
:login_url => "https://cas.example.foo/login",
|
92
116
|
:logout_url => "https://cas.example.foo/logout",
|
93
117
|
:validate_url => "https://cas.example.foo/proxyValidate",
|
94
|
-
:
|
95
|
-
:
|
118
|
+
:username_session_key => :cas_user,
|
119
|
+
:extra_attributes_session_key => :cas_extra_attributes,
|
96
120
|
:logger => cas_logger,
|
97
|
-
:
|
121
|
+
:enable_single_sign_out => true
|
98
122
|
)
|
99
123
|
|
100
|
-
Note that it is
|
124
|
+
Note that normally it is not necessary to specify <tt>:login_url</tt>, <tt>:logout_url</tt>, and <tt>:validate_url</tt>.
|
101
125
|
These values are automatically set to standard CAS defaults based on the given <tt>:cas_base_url</tt>.
|
102
126
|
|
103
|
-
The <tt>:
|
127
|
+
The <tt>:username_session_key</tt> value determines the key under which you can find the CAS username in the Rails session hash.
|
104
128
|
|
105
129
|
Any additional info that the CAS server might have supplied about the user during authentication will be found under the
|
106
|
-
<tt>:
|
130
|
+
<tt>:extra_attributes_session_key</tt> value in the Rails session hash (i.e. given the above configuration, you would find this
|
107
131
|
info under <tt>session[:cas_extra_attributes]</tt>).
|
108
132
|
|
109
133
|
An arbitrary Logger instance can be given as the :logger parameter. In the example above we log all CAS activity to a
|
@@ -119,29 +143,49 @@ the disadvantage is that the filter no longer checks to make sure that the user'
|
|
119
143
|
In other words it is possible for the user's authentication session to be closed on the CAS server without the
|
120
144
|
client application knowing about it.
|
121
145
|
|
122
|
-
|
123
|
-
notify the client application that the CAS session is closed
|
124
|
-
|
146
|
+
To address this, RubyCAS-Client now supports the new "Single Sign-Out" functionality in CAS 3.1, allowing the server to
|
147
|
+
notify the client application that the CAS session is closed. The client will automatically intercept Single Sign-Out
|
148
|
+
requsts from the CAS server, but in order for this to work you must configure your Rails application as follows:
|
149
|
+
|
150
|
+
1. The Rails session store must be set to ActiveRecord: <tt>config.action_controller.session_store = :active_record_store</tt>
|
151
|
+
2. The server must be able to read and write to RAILS_ROOT/tmp/sessions. If you are in a clustered environment,
|
152
|
+
the contents of this directory must be shared between all server instances.
|
153
|
+
3. Cross-site request forgery protection must be disabled. In your <tt>application.rb</tt>: <tt>self.allow_forgery_protection = false</tt>.
|
154
|
+
(Or rather you may want to disable forgery protection only for actions that are behind the CAS filter.)
|
155
|
+
4. Finally, you must add <tt>:enable_single_sign_out => true</tt> to your CAS client config (a similar option must be
|
156
|
+
enabled on the CAS server, if you're using RubyCAS-Server).
|
157
|
+
|
158
|
+
The best way to debug single-sign out functionality is to configure your CAS client with logging (see above) and then watch the
|
159
|
+
log to ensure that single-sign out requests from the server are being processed correctly.
|
160
|
+
|
125
161
|
|
126
|
-
Alternatively, it is possible to disable
|
127
|
-
configuration option to true as in the example
|
162
|
+
Alternatively, it is possible to disable authentication persistence in the client by setting the <tt>:authenticate_on_every_request</tt>
|
163
|
+
configuration option to true as, in the example in the previous section. However, this is not recommended as it will almost
|
164
|
+
certainly have a deleterious impact on performance and can interfere with certain HTTP transactions (AJAX requests, for example).
|
128
165
|
|
129
166
|
|
130
167
|
==== Defining a 'logout' action
|
131
168
|
|
132
|
-
Your Rails application's controller(s) will probably have some sort of logout function.
|
133
|
-
|
169
|
+
Your Rails application's controller(s) will probably have some sort of logout function. Here you can do any necessary local
|
170
|
+
cleanup, and then call <tt>CASClient::Frameworks::Rails::Filter.logout(controller)</tt>. For example:
|
134
171
|
|
135
|
-
class ApplicationController < ActionController::Base
|
172
|
+
class ApplicationController < ActionController::Base
|
173
|
+
|
174
|
+
# ...
|
136
175
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
176
|
+
def logout
|
177
|
+
# optionally do some local cleanup here
|
178
|
+
# ...
|
179
|
+
|
180
|
+
CASClient::Frameworks::Rails::Filter.logout(self)
|
181
|
+
end
|
142
182
|
end
|
143
|
-
end
|
144
183
|
|
184
|
+
By default, the logout method will clear the local Rails session, do some local CAS cleanup, and redirect to the CAS
|
185
|
+
logout page. Additionally, the <tt>request.referer</tt> value from the <tt>controller</tt> instance is passed to the
|
186
|
+
CAS server as a 'destination' parameter. This allows RubyCAS server to provide a follow-up login page allowing
|
187
|
+
the user to log back in to the service they just logged out from using a different username and password. Other
|
188
|
+
CAS server implemenations may use this 'destination' parameter in different ways.
|
145
189
|
|
146
190
|
==== Gatewayed (i.e. optional) authentication
|
147
191
|
|
@@ -161,6 +205,9 @@ CAS authentication for all actions in a controller except the index action:
|
|
161
205
|
# ...
|
162
206
|
end
|
163
207
|
|
208
|
+
To provide a login URL for unauthenticated users:
|
209
|
+
|
210
|
+
<%= link_to("Login", CASClient::Frameworks::Rails::Filter.login_url(controller)) %>
|
164
211
|
|
165
212
|
==== How to act as a CAS proxy
|
166
213
|
|
@@ -221,12 +268,12 @@ to authenticate another application:
|
|
221
268
|
|
222
269
|
service_uri = "http://some-other-application.example.foo"
|
223
270
|
proxy_granting_ticket = session[:cas_pgt]
|
224
|
-
|
271
|
+
proxy_ticket = CASClient::Frameworks::Rails::Filter.client.request_proxy_ticket(service_uri, proxy_granting_ticket)
|
225
272
|
|
226
|
-
<tt>
|
273
|
+
<tt>proxy_ticket</tt> should now contain a valid proxy ticket. You can use it to authenticate other services by sending it together with
|
227
274
|
the service URI as parameters to your target application:
|
228
275
|
|
229
|
-
http://some-other-application.example.foo?service=#{CGI
|
276
|
+
http://some-other-application.example.foo?service=#{CGI::escape(proxy_ticket.service)}&ticket=#{proxy_ticket.ticket}
|
230
277
|
|
231
278
|
This is of course assuming that http://some-other-application.example.foo is also protected by the CAS filter.
|
232
279
|
Note that you should always URI-encode your service parameter inside URIs!
|
@@ -272,4 +319,4 @@ GNU General Public License for more details.
|
|
272
319
|
|
273
320
|
You should have received a copy of the GNU Lesser General Public License
|
274
321
|
along with this program (see the file called LICENSE); if not, write to the
|
275
|
-
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
322
|
+
Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|