Installation

Cargo Dependencies

Add the following to your Cargo.toml:

[dependencies]
actix-security = "0.2"

Feature Flags

FeatureDefaultDescription
macrosProcedural macros (#[secured], #[pre_authorize], etc.)
argon2Enables Argon2 password encoding
http-basicEnables HTTP Basic authentication
jwtEnables JWT authentication
sessionEnables Session-based authentication
oauth2Enables OAuth2/OIDC authentication
fullAll features enabled

Minimal Installation

For a minimal installation without optional features:

[dependencies]
actix-security = { version = "0.2", default-features = false }

Full Installation

For all features:

[dependencies]
actix-security = { version = "0.2", features = ["full"] }

Compatibility

Actix SecurityActix WebRust
0.1.x4.x1.70+

Crate Overview

The actix-security crate provides:

Core Features:

  • Security middleware (SecurityTransform)
  • Authentication (MemoryAuthenticator, Authenticator trait)
  • Authorization (RequestMatcherAuthorizer, Authorizer trait)
  • Password encoding (Argon2PasswordEncoder, DelegatingPasswordEncoder)
  • User model (User, AuthenticatedUser)
  • Security headers middleware (SecurityHeaders)
  • Security context (SecurityContext)
  • Expression evaluation

Procedural Macros (with macros feature):

  • #[secured] - Role-based method security
  • #[pre_authorize] - Expression-based method security
  • #[permit_all] - Mark endpoints as public
  • #[deny_all] - Block all access
  • #[roles_allowed] - Java EE style role checks

Verifying Installation

Create a simple test to verify everything is working:

use actix_security::http::security::{
    AuthenticationManager, Argon2PasswordEncoder, PasswordEncoder, User
};
use actix_security::secured;

#[test]
fn test_installation() {
    // Test password encoding
    let encoder = Argon2PasswordEncoder::new();
    let encoded = encoder.encode("test");
    assert!(encoder.matches("test", &encoded));

    // Test user creation
    let user = User::with_encoded_password("test", encoded)
        .roles(&["USER".into()]);
    assert_eq!(user.username, "test");
    assert!(user.roles.contains(&"USER".into()));
}

Run with:

cargo test test_installation