[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
The RADIUS Design Model
Hi all,
sorry for joining this discussion so late.
In Section 2.1.3 the document says:
"
One of the fundamental goals of the RADIUS protocol design was to
allow RADIUS servers to be configured to support new attributes
without requiring server code changes.
"
We need to differentiate at least four cases here:
1) RADIUS Server Data Provisioning
A RADIUS server consists of the RADIUS protocol implementation (often
implements a bunch of other protocols as well) and has access to a database.
Such a database can come in various flavors depending on the amount of data
being handled. In the simplest case it is a text file.
When new data is added to the database and then it may already at this point
in time relate somehow to the data types being used when transmitted over
the wire. Everything can be encoded as a RADIUS string data type so that it
can be transmitted in RADIUS; so that's not really a problem.
For testing purposes it might be useful to have additional a user interface
to enter data manually as well. This user interface might have certain
limitations regarding data types and hence some manual steps might be needed
before the data can be entered into the UI. This is particularly the case
with the encoding of "complex" attributes into a string.
So, is this issue relevant for the document?
Yes, I think so. There is one sentence in the document of Section 2.1.3:
"
* it is easier for the user to enter the data as well-known
types, rather than complex structures;
"
It is not clear to whom the term 'user' refers to. How easy or complex it is
for a person operating a RADIUS server to insert values into a database may
depend on a number of things, including support of provisioning scripts or
even user interfaces (largely for testing purposes).
2) RADIUS Server Data Transmission to RADIUS Client
There are 2 cases that need to be considered here:
a) RADIUS server just takes values from the database (more or less without
any further evaluation), and
b) RADIUS server dynamically decide what to return depending on a number of
criteria. This category falls a bit under the item (4).
With item (a) there is not really big impact for the RADIUS server (and
consequently for the RADIUS design guidelines document) as long as the data
being fetched is already in the format that allows the RADIUS server to put
it into a RADIUS attribute.
3) RADIUS Server Receiving Data from RADIUS Client
There are two approaches when it comes to the processing of incoming data on
the RADIUS server side:
a) Treat everything as an opaque object and write to the some storage for
later processing.
b) Perform processing within the RADIUS server itself. This approach is
useful when
one wants to make some policy decisions and potentially needs to interact
with other systems in order to react accordingly in response to an incoming
request.
Which approach is the right one depends very much on the intented usage of
the received info.
4) RADIUS Sever Policy Processing (i.e. the business logic)
Some RADIUS servers allow policy decisions to be made based, typically for
the purpose of authorization. These policy decisions need to be implemented
somehow in some programming language and if incoming attributes are used as
input to these policy decisions then their semantic needs to be understood.
How tighly the policy language itself is integrated into the core of the
RADIUS server implementation itself is an implementation choice.
The draft points to this policy language but only hints that there is a
"simple" policy language in place that understands some basic data types and
is also able to perform some simple processing actions.
I guess the disagreement is with step (3 - b) and particularly with (4). So,
I believe that there is at least some agreement here.
The initially considered RADIUS model did not consider the policy aspect, I
believe, and without describing of what existing implementations do in that
space it will be difficult to come to an agreement. We all have quite
different implementations that all vary from the "historically" defined
model (even thought it was never explicitly written down, I believe).
Unfortunately, it seems that the implementation internals and the
anticipated deployment model have an impact on the way how RADIUS attributes
are defined. I believe it makes sense to say that we want to give guidance
for standardization people to make it as simple as possible for implementers
(at least I hope so). In order to figure to figure out what worked well and
what didn't we would actually have to write code and to then see how
complicated it was (ideally in comparison to another approach). For some of
us it seems that the simplest implemention is to flatten the attributes out
into simpler onces. The down-side of that approach is that we run out of the
attribute space very quickly and defining these "simple" attributes already
requires a "complex attribute encoding" in the style of
http://tools.ietf.org/wg/radext/draft-ietf-radext-extended-attributes/. So,
there is a problem.
Unfortunately, I don't have a good idea on how to quickly solve the issues
raised above. To make it worse I have two additional questions:
1) How come did
http://tools.ietf.org/wg/radext/draft-ietf-radext-extended-attributes/ got
stuck again?
2) Why does nobody write a document with a punch of commonly used RADIUS
data types that most of the implementations are using already? It would make
the design of attributes so much easier! Every RADIUS dictionary
implementation already offers more than just the basic data types. Maybe the
specifications should catch up with implementation practice here.
Ciao
Hannes
PS: A totally independent issue: Can someone configure the mailing list so
that it displays the working group name in the Subject line? Makes it easier
to recognize the mails belonging to RADEXT and is inline with what other
working groups do.
--
to unsubscribe send a message to radiusext-request@ops.ietf.org with
the word 'unsubscribe' in a single line as the message text body.
archive: <http://psg.com/lists/radiusext/>