3个不稳定版本

0.5.0 2024年3月27日
0.4.1 2024年3月25日
0.4.0 2024年3月24日

认证中排名第247

Download history · Rust 包仓库 213/week @ 2024-03-19 · Rust 包仓库 223/week @ 2024-03-26 · Rust 包仓库 100/week @ 2024-04-02 · Rust 包仓库 14/week @ 2024-04-09 · Rust 包仓库 6/week @ 2024-04-16 · Rust 包仓库 5/week @ 2024-04-23 · Rust 包仓库

每月下载量111

MIT/Apache

33KB
724

Google ID令牌验证

crates.io documentation

一种简单的用户认证方法。基于https://crates.io/crates/google-jwt-verify的分支,侧重于最小化代码大小。

给定客户端ID和由JWT.io生成的JSON Web令牌,使用以下步骤验证令牌:https://developers.google.com/identity/gsi/web/reference/html-reference#server-side

Google的JSON Web密钥将根据返回的Cache-Control头自动获取和缓存。通过此库验证令牌的大多数请求将不会等待HTTP请求。

特性

  • blocking(默认)使用ureq
  • async使用tokio

为了简化构建,此crate选择不支持原生TLS。ring在获取签名密钥和签名验证时用于SSL加密。关于ring安全审计的更多信息,请参阅这里

快速入门

//If you don't have a client id, get one from here: https://console.developers.google.com/
let client_id = "37772117408-qjqo9hca513pdcunumt7gk08ii6te8is.apps.googleusercontent.com";
let token = "...";// Obtain a signed token from Google
let client = Client::new(&client_id);
let id_token = client.verify_id_token(&token)?;
let greeting = authorize_token(&id_token);

// use authenticated token to authorize
fn authorize_token(token: &Token<IdPayload>) -> Option<String> {
    match token {
        Token {
            payload: payload @ IdPayload {
                email: Some(email), ..
            },
            ..
        } if TEST_USERS.contains(&email.as_str()) => {
            Some(format!("hello {}", payload.name.as_ref().unwrap_or(email)))
        }
        _ => None,
    }
}

问题

请注意,Google的OAuth实现没有很好地记录。在OAuth同意屏幕中的测试用户列表不构成授权白名单(其他用户也将被授予访问权限)。有关更多详细信息,请参阅issuetracker

依赖项

~7–18MB
~333K SLoC