[][src]Crate actix_web_middleware_cognito

Middleware for actix-web that helps you validate Cognito tokens.

Cognito validator

Before setting up the middleware we have to create a CognitoValidator that will be built by receiving some vari ables from the environment:

  • COGNITO_REGION: The region of the Cognito pool.
  • COGNITO_POOLID: The Cognito pool id.
  • COGNITO_CLIENTID: The client id of your app.
  • COGNITO_ENABLED (optional): if not present or 0 no validation will be done.
  • COGNITO_VERIFY_ACCESSTOKEN (optional): if not present or 0 idToken will be validated. If present, the accessToken will be validated instead.

Usage

Setting up the middleware:

// builidng the validator in order to be shared between all threads.
let cognito_validator =
    Arc::new(CognitoValidator::create().expect("Error configuring the Cognito validator"));

HttpServer::new(move || {
    // cognito middleware
    let cognito = Cognito::new(cognito_validator.clone());

    // set up the app
    App::new()
        .wrap(cognito)
        .route("/", web::get().to(index))
})
.bind(format!("0.0.0.0:{}", PORT))
.unwrap_or_else(|_| panic!("🔥 Couldn't start the server at port {}", PORT))
.run()
.await

Extracting the token from the request

The library provides a CognitoInfo extractor for you to get information about the Cognito token. If the token is invalid or you disable the middleware (by omitting the COGNITO_ENABLED environment variable) you will always get a disabled CognitoInfo, i.e. a CognitoInfo with no token.

async fn index(auth: CognitoInfo) -> impl Responder {
    let msg = format!(
        "User with id {} made this call with token {}",
        auth.user.unwrap(),
        auth.token.unwrap()
    );
    HttpResponse::Ok().body(msg)
}

Structs

Cognito

Middleware to use in your Actix-web services

CognitoInfo

This extractor will only work if you have enabled the Cognito middleware. It will provide information about the token and the user id

CognitoValidator

Helper to validate the Cognito token. It relies on environment variables and will check the token against Amazon servers.