#cognito #middleware #actix-web #env-var #actix

actix-web-middleware-cognito

帮助您验证Cognito令牌的中间件

5个版本 (3个破坏性更新)

0.4.0-beta.192022年1月7日
0.4.0-beta.52021年6月5日
0.3.0 2020年9月25日
0.2.0 2020年8月4日
0.1.0 2020年8月3日

#1134 in HTTP服务器

每月下载量27

MIT许可证

20KB
300

actix-web-middleware-cognito

ActionsStatus Crates.io API

actix-web提供验证Cognito令牌的中间件。

Cognito验证器

在设置中间件之前,我们需要创建一个CognitoValidator,它将通过接收一些环境变量来构建。

  • COGNITO_REGION:Cognito池的区域。
  • COGNITO_POOLID:Cognito池ID。
  • COGNITO_CLIENTID:您的应用程序的客户端ID。
  • COGNITO_ENABLED(可选):如果不存在或为0,则不进行验证。
  • COGNITO_VERIFY_ACCESSTOKEN(可选):如果不存在或为0,则验证idToken。如果存在,则验证accessToken。

使用方法

设置中间件

// 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))
.unwrap_or_else(|_| panic!("🔥 Couldn't start the server at port {}", PORT))
.run()
.await

从请求中提取令牌

该库提供了一个CognitoInfo提取器,您可以使用它来获取Cognito令牌的信息。如果令牌无效或禁用了中间件(通过省略COGNITO_ENABLED环境变量),您将始终得到一个禁用的CognitoInfo,即一个没有tokenCognitoInfo

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中查看或运行它:cargo run --example main

依赖项

~21–34MB
~705K SLoC