Awesome Phil, that was exactly the kind of example that is awesomely useful :)

I see that by default the username is stored along with this.

[peap] Adding cached attributes to the reply:
    User-Name = "jd187"
    Cached-Session-Policy = "vlan=316"

Do you know exactly how the session resumption is determined? In the debug output I see:

[peap] eaptls_process returned 3
[peap] EAPTLS_SUCCESS
[peap] Session established.  Decoding tunneled attributes.
[peap] Peap state TUNNEL ESTABLISHED
[peap] Skipping Phase2 because of session resumption
[peap] SUCCESS

Would ANY authentication for "jd187" get the cached applied or does freeradius have some concept of uniqueness when it comes to different sessions by the same user?

The documentation (in eap.conf states):

#  The cache contains the following information:
#
#  session Id - unique identifier, managed by SSL
#  User-Name  - from the Access-Accept
#  Stripped-User-Name - from the Access-Request
#  Cached-Session-Policy - from the Access-Accept
#

#
# On session resumption, these attributes are copied from the cache, and placed into the reply list.

So I am assuming that session id is some combination of attributes that uniquely describe a single particular connection/authentication (I would hope). In my environment, if the cache is purely based off username, this would break our entire system.

Figured I would bring this to see if anyone has any insight on how this session ID is created, managed, and applied to the subsequent session/authentications. I'll be running some experiments on this early next week but figured I might ask if anyone has any ideas on how/when the caching is applied (as configured by the eap.conf variables).

Thanks in advance,
- John Douglass, Georgia Tech

On 04/20/2011 07:18 PM, Phil Mayers wrote:
On 04/20/2011 10:13 PM, John Douglass wrote:

What exactly am I supposed to store into the attribute
"Cached-Session-Policy"? Is this referring to a policy within the file
"policy.conf" that will run and extract attributes according to the
function there or is it something else?

Based on a quick glance at the source: You store anything you want, and then you write policy to act on it. The server doesn't do anything specific with the attribute beyond storing it and allowing you to read it.

For example:

post-auth {
  if (reply:Cached-Session-Policy =~ /group=(.+),building=(.+)/) {
    update reply {
      My-Vlan = "%{sql:...some sql based on the %{1} and %{2} values}"
    }
  } else {
    # do your policy work, then
    update reply {
      Cached-Session-Policy := "group=staff,building=admin"
    }
  }
}




The notes also say:

    # You probably also want "use_tunneled_reply = yes" when using fast
    session resumption.

And I have turned that on everywhere I could find, but it doesn't appear
to be even saving the 1st values of Tunnel-Private-Group-Id.


Hmm.

AFAICT from the source, the common TLS code (used by EAP-TLS and PEAP/TTLS too) will only cache User-Name, Stripped-User-Name and Cached-Session-Policy. Arbitrary valuepairs aren't stored in the cache.

In some respects, this makes sense - you might set the VLAN based on the switch they're on; you need to re-calculate those values because you can't guarantee that session resumption takes place on the same switch.

Basically, if you set reply variables based on some kind of lookup (e.g. SQL) the safe option is to store the "key" in Cached-Session-Policy, then set the reply variables (vlan etc.) in post-auth based on the key.
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to