Authentication Support Service


The Authentication Support Service is a generic service that provides support to offload a service from authentication and fetching/refreshing of an authorization token.
A POD running a Service can include this running in a sidecar container. This Authentication Support Service will then make sure that a valid token is available to the service by means of a local file (in the POD).

The Service can then just read the token from a file and insert it into the HTTP header of each REST call.

The Authentication Support Service currently supports authentication using a private shared key. The used authentication provider used for testing is Keycloak.

The component is configured by means of the following environment variables:

CERT_PATH  the file path to an x.509 cert to be used for TLS.
CERT_KEY_PATH the file path to a file containing the private key of the cert.
ROOT_CA_CERTS_PATH optional file path to a file containing the trusted (CA) certs used by the Authentication Provider.
LOG_LEVEL an optional level of the log (Info, Debug, Trace, Warn, Error). Defaults to Info.
CREDS_GRANT_TYPE
used for authentication, Client Credentials grant type.
CREDS_CLIENT_SECRET used for authentication, Client Secret.
CREDS_CLIENT_ID used for authentication, Client ID.
OUTPUT_FILE the file path of the file in which the fetched authorization token shall be stored.
AUTH_SERVICE_URL used for authentication, the URL to the authentication service.
REFRESH_MARGIN_SECONDS defines how long time in advance the token is refreshed (before it expires). Default is 5 seconds.


The Authentication Support Service is available as a docker image (example path to staging repo)

nexus3.o-ran-sc.org:10004/o-ran-sc_nonrtric-auth-token-fetch

A typical useage of the image in kubernetes as a sidecar container may look like this where the application container and the sidecar container share an "emptyDir" volume. This volume is shared between the containers during the lifetime of the pod.

Deployment manifest example

Example yaml
     ...... 
     containers:
      - name: informationservice
        image: nexus3.o-ran-sc.org:10004/o-ran-sc_nonrtric-information-coordinator-service:1.3.0
        imagePullPolicy: Always
        ports:
        - name: http
          containerPort: 8083
        - name: https
          containerPort: 8434
        volumeMounts:
        - mountPath: /token-cache
          name: token-cache-volume
      - name: authsidecar
        image: nexus3.o-ran-sc.org:10004/o-ran-sc/nonrtric-auth-token-fetch:1.0.0
        imagePullPolicy: Always
        env:
        - name: CREDS_GRANT_TYPE
          value: client_credentials
        - name: CREDS_CLIENT_SECRET
          value: XXXXXXX
        - name: CREDS_CLIENT_ID
          value: icsc
        - name: OUTPUT_FILE
          value: /token-cache/jwt.txt
        - name: AUTH_SERVICE_URL
          value: http://keycloak.keycloak:80/realms/nrtrealm/protocol/openid-connect/token
        volumeMounts:
        - mountPath: /token-cache
          name: token-cache-volume
      volumes:
      - name: token-cache-volume
        emptyDir: {}