REST module authenticate credentials issue

Alan DeKok aland at deployingradius.com
Tue Dec 31 15:40:10 UTC 2024


On Dec 30, 2024, at 6:41 PM, email.me at kevp.com wrote:
> I'm trying to setup the rest module to authenticate with data to an API but
> using a fixed API token every time to authenticate the API request itself.

  Any fixed API token will need to be passed as extra parameters, or as a json blob.  You can't use HTTP Authentication for both the user and the API.

> I've configured the authenticate section of the rest config to have a
> username = xxx and password = yyy as per the example/docs.

  Except that authenticates the user, not the API request itself.

>    rest {
...
>        authenticate {
>            uri = "${..connect_uri}/api/v1/auth"
>            method = "post"
>            body = "json"
>            auth = "basic"
>            username = "api-user123"
>            password = "api-password123"

  Except that "authenticate" means "authenticate the user" and not "authenticate the REST API".

> But. the API post basic auth header always has the username and password of
> the end user being checked (%{User-Name}:%{User-Password}), not my
> configured static username and password (api-user123:api-password123).

 Because "authenticate" means "authenticate the user" and not "authenticate the REST API".

  HTTP does not provide a way to send two sets of names && passwords.  So the REST module can't do it.

  The better way is to just use TLS.  Set a client certificate via "certificate_file".  That will authenticate the connection.  You can then do User-Name / User-Password checking via "authenticate".

> Q: Is there a way to configure the rest module authenticate section to use
> configured static credentials?

  You can't send *two* usernames and passwords via HTTP.

> One other idea I had was not to use the builtin auth and just add my own
> additional header containing the basic auth base64 static credentials.

  That still wont' work.  You can't send *two* usernames and passwords via HTTP.

  Set up TLS, and use a client certificate.  This isn't a limitation of FreeRADIUS.  It's how HTTP works.

  Alan DeKok.



More information about the Freeradius-Users mailing list