9个不稳定版本 (3个重大变更)

0.4.0 2024年5月26日
0.3.0 2024年5月26日
0.2.1 2024年5月26日
0.1.4 2024年5月26日

#122 in 认证

Download history • Rust 包仓库 118/week @ 2024-05-19 • Rust 包仓库 518/week @ 2024-05-26 • Rust 包仓库 140/week @ 2024-06-02 • Rust 包仓库 138/week @ 2024-06-09 • Rust 包仓库 84/week @ 2024-06-16 • Rust 包仓库 55/week @ 2024-06-23 • Rust 包仓库 121/week @ 2024-06-30 • Rust 包仓库 144/week @ 2024-07-07 • Rust 包仓库 34/week @ 2024-07-14 • Rust 包仓库 34/week @ 2024-07-21 • Rust 包仓库 81/week @ 2024-07-28 • Rust 包仓库

每月下载量 303次

MIT许可证

165KB
3.5K SLoC

passage-auth

Passage认证库,适用于Rust! 🦀

概述

passage-auth 是一个非官方的Rust库,用于 1Password的Passage.

  • 它严格遵循 Passage认证API.

  • 当前功能

    • 应用
    • 认证
    • 当前用户
    • JWKS
    • 登录
    • MagicLink
    • OpenId
    • OTP
    • 注册
    • 令牌
    • 用户
    • OAuth2
    • Passkey准备就绪(不计划添加支持)

模型是通过OpenAPI Generator自动生成的。其余的认证API是由你的朋友们在Kindness构建的。验证函数的一些先验知识来自我们的朋友Rob Yoder

[!警告]
这个crate是全新的,并非所有功能都经过测试或文档化。

预期会有破坏性的变更。

用法

该库从环境变量 PASSAGE_APP_ID 读取您的Passage APP ID,并可选地从 PASSAGE_PUB_JWK 验证令牌。您还可以传递一个 Config 对象或使用 Config 构建器来创建Passage客户端。

验证JWT

// Create a new passage instance
let passage = Passage::with_config(Config::default().with_app_id(APP_ID.to_string()));

// Retrieve the JSON Web Key Set (JWKS) for your Passage application. 
let response: JwkResponse = passage.jwks().get_jwks().await?;
passage.set_pub_jwk(response.keys.first()?)

// Verify a user's JWT
let passage_id = passage.authenticate().authenticate_token(jwt)?;

assert_eq!(passage_id, "AabRBkquedeVBxv9kFyfeXHI".to_owned());

一旦验证了用户,您的应用程序就可以进行其操作!此库几乎具有Passage认证API的所有功能,因此您可以进行更多操作。例如

获取有关用户的信息

let passage = Passage::with_config(
 Config::default()
  .with_app_id(APP_ID.to_string())
  .with_user_bearer_token(JWT.to_string()),
);
let response: CurrentUserResponse = passage.current_user().get_current_user().await?;

println!(response.user)
CurrentUserResponse { user: CurrentUser { created_at: "2024-05-25T12:14:42.420571Z", email: "ted@tedlasso.org", email_verified: true, id: "AabRBkquedeVBxv9kFyfeXHI", last_login_at: "2024-05-25T14:27:53.825045Z", login_count: 3, phone: "", phone_verified: false, social_connections: UserSocialConnections { apple: None, github: None, google: None }, status: Active, updated_at: "2024-05-25T14:27:53.975632Z", user_metadata: None, webauthn: false, webauthn_devices: [], webauthn_types: [] } }

刷新令牌或吊销刷新令牌

// APP ID loaded via environment variable
let passage = Passage::new();

// Refresh tokens
let response = passage.tokens().refresh_auth_token(RefreshAuthTokenRequest{refresh_token}).await

// Revoke refresh token
let response = passage.tokens().revoke_refresh_token(refresh_token)

许可证

此项目受MIT许可证许可。

依赖项

~7–22MB
~317K SLoC