Skip to content
Snippets Groups Projects
authentication.md 3.13 KiB
Newer Older
  • Learn to ignore specific revisions
  • # Authentication service
    
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    ## Features
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    This service allows users to login to / logout from the Web Portal. Establishing an authenticated session is a prerequisite for managing user rights to restricted-access resources.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    ## Dependencies
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    The service relies on
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    * the [API Gateway](../off-the-shelf-apps/api-gateway.md), in particular its Admin API;
    
    * external identity providers, which actually store user profiles and can verify user credentials. Despite being designed to potentially support different identity providers, in the present implementation only the [Legacy AUTH Identity Provider](../core/legacy-auth.md) is supported. A [middleware](../middlewares/legacy-auth.md) was developed, so as to facilitate the interaction between this service and the Legacy AUTH Identity Provider.
    
    ![authentication-service](../../assets/authentication-service.png)
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    ## Endpoints
    
    This service provides five **endpoints**:
    
    1. A **login** endpoint per identity provider (just one in the present implementation, namely `/login/legacy`), allowing users to authenticate using a username/password pair. In case the identity provider confirms that user credentials are correct, a couple of cookies are set:
        1. an HTTP-only cookie including an **access token**, including in turn a JSON Web Token (JWT), signed by the API Gateway, namely Kong.
        2. a cookie including an **XSRF token** (generated as a version 4 UUID).
    
        Both the access token and the XSRF token are needed to issue authenticated requests. We refer the reader to a [dedicated page](../../miscellaneous/security.md) for further information about security.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    2. A **logout** endpoint, `/logout`, which signs out the user by deprecating the cookie set by the login endpoint.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    3. An **user info** endpoint, allowing one to fetch an user profile.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    4. An **user info update** endpoint, `/user/update` allowing one to update an user profile.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    5. An **health** endpoint, `/health`, returning a `200` HTTP Status Code in case the service is healthy, `503` in the opposite case. For this service to be healthy, two conditions must be fulfilled:
        * the [API Gateway](../off-the-shelf-apps/api-gateway.md) must be up;
    
        * the [Legacy AUTH Middleware](../middlewares/legacy-auth.md) must be up.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    ## Implementation
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    The service is implemented using the [NestJS](https://nestjs.com/) framework. We refer the reader to the [NestJS-based micro-services](../../miscellaneous/nestjs-micro-services.md) page for further details concerning the latter framework and the features it provides.
    
    Alessandro Cerioni's avatar
    Alessandro Cerioni committed
    ### TO FURTHER DEVELOP
    
    * What's the interplay between this service and Kong? Let's provide sequence diagrams!
    * How is the access token generated and signed?
    * What is the difference between the cookie expiration time and that of the JWT for the Legacy Middleware?
    
    
    <!-- ## How it works
    
    The entrypoint of the service is a REST API provided by a [NestJS](https://github.com/nestjs/nest) application. It depends on two other services:
    
    * The Legacy Authentication Middleware to verify the identity of the user and retrieve its profile (called through our api gateway: Kong)
    * The Admin API of Kong to get the user specific secrets in order to sign the JSON Web Tokens -->