actix-web-middleware-cognito

ActionsStatus Crates.io API

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 variables from the environment:

Usage

Setting up the middleware:

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

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)) .unwraporelse(|_| 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.

rust 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) }

Example

You can check the example in the repo or run it: cargo run --example main.