Configure rlm_rest module to allow token authentication

Rohith Asrk rohith.asrk at gmail.com
Thu Jul 12 23:57:30 CEST 2018


Hi Arran and Zenon,

Thank you for your replies. I've tried configuring my authorize section to
send a token in the bearer header whenever a authorize request is sent.
I've failed at doing it maybe because I'm a beginner to FreeRADIUS.

My authorize section looks like the following.

authorize {
            uri = "${..connect_uri}/api/authorize/"
            method = 'post'
            body = 'json'
            data = '{"username": "%{User-Name}", "password":
"%{User-Password}"}'
            tls = ${..tls}

            # Confused about this section.
            update control {
                &REST-HTTP-Header += "Authorization: Bearer token123"
            }
            rest
        }

I tried testing it using the radtest command. I see that there are no
headers being set. I'm using FreeRADIUS version 3.0.15 on Fedora (Redhat).

Can you please help me out with this?

On Tue, Jul 10, 2018 at 5:12 PM, Arran Cudbard-Bell <
a.cudbardb at freeradius.org> wrote:

>
>
> > On Jul 10, 2018, at 6:37 AM, Zenon Mousmoulas <zmousm at noc.grnet.gr>
> wrote:
> >
> > July 10, 2018 1:18 PM, "Rohith Asrk" <rohith.asrk at gmail.com> wrote:
> >
> >> I actually think I got my basics wrong here. Sorry for all the
> confusion.
> >> Please ignore the previous mail.
> >>
> >> What I actually need is configuring the FreeRADIUS daemon to send
> requests
> >> to the API. And the API here needs token in the form of a authorization
> >> header or a querystring.
> >>
> >> Can I configure FreeRADIUS to send HTTP requests to the API with bearer
> >> authorization in the headers? As of now, the rest module configuration
> >> looks like this
> >> <http://django-freeradius.readthedocs.io/en/latest/
> general/freeradius.html>
> >> [1].
> >>
> >> The API is going to check for tokens in the headers or in the query
> strings
> >> and we want the FreeRADIUS instance to be an authorized user.
> >
> > No mention of HTTP auth in the linked doc.
> >
> > So rlm_rest supports a number of options for that, but not bearer. Just
> adding that as a header might work though:
> >
> > https://github.com/FreeRADIUS/freeradius-server/blob/v3.0.x/
> raddb/mods-available/rest#L84
>
> It does, i've done it.
>
>                 map json "%{rest_subsc:POST https://${modules.rest[rest_
> subsc].username}:${modules.rest[rest_subsc].password}@${
> modules.rest[rest_subsc].server}:${modules.rest[rest_subsc].port}/oauthv2/token
> grant_type=client_credentialst}" {
>                         &control:Cache-TTL := '$.expires_in'
>                         &control:Tmp-String-0 := '$.access_token'
>                         &control:Tmp-String-1 := '$.token_type'
>                 }
>
>                 timer_record_rest_subsc
>
>                 if (&reply:REST-HTTP-Status-Code &&
> (&reply:REST-HTTP-Status-Code != 200)) {
>                         fail
>                 }
>
>                 # Access token should be pre-base64 encoded by the server
>                 update control {
>                         &REST-HTTP-Header += "Authorization: Bearer
> %{control:Tmp-String-0}"
>                 }
>
>                 # Issue request with new token
>                 rest
>
> The map/json/rest xlat are all specific to v4 for, so you'd need to figure
> out how to do it on your own in v3.  I'd recommend caching the token using
> the cache module once you have it.
>
> -Arran
>
>
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/
> list/users.html
>


More information about the Freeradius-Users mailing list