From bdbf47a38eb56c26f51fc84622c3cf2ccb9272c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E8=BF=90=E5=AE=B6?= Date: Fri, 17 May 2024 14:20:36 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4firebase=20admin=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .cargo/{config => config.toml} | 0 Cargo.lock | 286 ++++----------------------------- service/Cargo.toml | 1 - service/src/firebase_admin.rs | 62 ------- service/src/lib.rs | 1 - service/src/player_info.rs | 9 -- 6 files changed, 28 insertions(+), 331 deletions(-) rename .cargo/{config => config.toml} (100%) delete mode 100644 service/src/firebase_admin.rs diff --git a/.cargo/config b/.cargo/config.toml similarity index 100% rename from .cargo/config rename to .cargo/config.toml diff --git a/Cargo.lock b/Cargo.lock index 30e9f55..6689056 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -183,10 +183,10 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", - "hyper 1.2.0", + "hyper", "hyper-util", "itoa", "matchit", @@ -216,8 +216,8 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -238,8 +238,8 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "mime", "pin-project-lite", @@ -879,31 +879,6 @@ dependencies = [ "slab", ] -[[package]] -name = "gcp_auth" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e155fdc0640589cc660d00e7ed7aa608479e20187b9ea352a77dd4443dd2d856" -dependencies = [ - "async-trait", - "base64 0.22.0", - "chrono", - "home", - "hyper 0.14.28", - "hyper-rustls", - "ring", - "rustls 0.22.4", - "rustls-pemfile 2.1.2", - "serde", - "serde_json", - "thiserror", - "tokio", - "tracing", - "tracing-futures", - "url", - "which", -] - [[package]] name = "generic-array" version = "0.14.7" @@ -933,25 +908,6 @@ version = "0.28.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4271d37baee1b8c7e4b708028c57d816cf9d2434acb33a549475f78c181f6253" -[[package]] -name = "h2" -version = "0.3.26" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" -dependencies = [ - "bytes", - "fnv", - "futures-core", - "futures-sink", - "futures-util", - "http 0.2.12", - "indexmap", - "slab", - "tokio", - "tokio-util", - "tracing", -] - [[package]] name = "h2" version = "0.4.2" @@ -963,7 +919,7 @@ dependencies = [ "futures-core", "futures-sink", "futures-util", - "http 1.1.0", + "http", "indexmap", "slab", "tokio", @@ -999,30 +955,6 @@ dependencies = [ "hashbrown 0.14.3", ] -[[package]] -name = "headers" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "322106e6bd0cba2d5ead589ddb8150a13d7c4217cf80d7c4f682ca994ccc6aa9" -dependencies = [ - "base64 0.21.7", - "bytes", - "headers-core", - "http 1.1.0", - "httpdate", - "mime", - "sha1", -] - -[[package]] -name = "headers-core" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "54b4a22553d4242c49fddb9ba998a99962b5cc6f22cb5a3482bec22522403ce4" -dependencies = [ - "http 1.1.0", -] - [[package]] name = "heck" version = "0.4.1" @@ -1071,17 +1003,6 @@ dependencies = [ "windows-sys 0.52.0", ] -[[package]] -name = "http" -version = "0.2.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" -dependencies = [ - "bytes", - "fnv", - "itoa", -] - [[package]] name = "http" version = "1.1.0" @@ -1093,17 +1014,6 @@ dependencies = [ "itoa", ] -[[package]] -name = "http-body" -version = "0.4.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2" -dependencies = [ - "bytes", - "http 0.2.12", - "pin-project-lite", -] - [[package]] name = "http-body" version = "1.0.0" @@ -1111,7 +1021,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1cac85db508abc24a2e48553ba12a996e87244a0395ce011e62b37158745d643" dependencies = [ "bytes", - "http 1.1.0", + "http", ] [[package]] @@ -1122,8 +1032,8 @@ checksum = "41cb79eb393015dadd30fc252023adb0b2400a0caee0fa2a077e6e21a551e840" dependencies = [ "bytes", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "pin-project-lite", ] @@ -1139,30 +1049,6 @@ version = "1.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" -[[package]] -name = "hyper" -version = "0.14.28" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" -dependencies = [ - "bytes", - "futures-channel", - "futures-core", - "futures-util", - "h2 0.3.26", - "http 0.2.12", - "http-body 0.4.6", - "httparse", - "httpdate", - "itoa", - "pin-project-lite", - "socket2", - "tokio", - "tower-service", - "tracing", - "want", -] - [[package]] name = "hyper" version = "1.2.0" @@ -1172,9 +1058,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "h2 0.4.2", - "http 1.1.0", - "http-body 1.0.0", + "h2", + "http", + "http-body", "httparse", "httpdate", "itoa", @@ -1184,22 +1070,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "399c78f9338483cb7e630c8474b07268983c6bd5acee012e4211f9f7bb21b070" -dependencies = [ - "futures-util", - "http 0.2.12", - "hyper 0.14.28", - "rustls 0.22.4", - "rustls-native-certs", - "rustls-pki-types", - "tokio", - "tokio-rustls", -] - [[package]] name = "hyper-tls" version = "0.6.0" @@ -1208,7 +1078,7 @@ checksum = "70206fc6890eaca9fde8a0bf71caa2ddfc9fe045ac9e5c70df101a7dbde866e0" dependencies = [ "bytes", "http-body-util", - "hyper 1.2.0", + "hyper", "hyper-util", "native-tls", "tokio", @@ -1225,9 +1095,9 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", - "http-body 1.0.0", - "hyper 1.2.0", + "http", + "http-body", + "hyper", "pin-project-lite", "socket2", "tokio", @@ -1355,8 +1225,8 @@ dependencies = [ "axum-extra", "chrono", "futures-util", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "moka", "once_cell", @@ -2015,11 +1885,11 @@ dependencies = [ "encoding_rs", "futures-core", "futures-util", - "h2 0.4.2", - "http 1.1.0", - "http-body 1.0.0", + "h2", + "http", + "http-body", "http-body-util", - "hyper 1.2.0", + "hyper", "hyper-tls", "hyper-util", "ipnet", @@ -2090,28 +1960,6 @@ dependencies = [ "syn 1.0.109", ] -[[package]] -name = "rs-firebase-admin-sdk" -version = "2.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "60d5ef0fca7bc47094901ec81745f2ae7b2147ec311f65f75b66e77eb8d78311" -dependencies = [ - "base64 0.22.0", - "bytes", - "error-stack", - "gcp_auth", - "headers", - "http 1.1.0", - "openssl", - "reqwest", - "serde", - "serde_json", - "thiserror", - "time", - "tokio", - "urlencoding", -] - [[package]] name = "rsa" version = "0.9.6" @@ -2183,37 +2031,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f9d5a6813c0759e4609cd494e8e725babae6a2ca7b62a5536a13daaec6fcb7ba" dependencies = [ "ring", - "rustls-webpki 0.101.7", + "rustls-webpki", "sct", ] -[[package]] -name = "rustls" -version = "0.22.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bf4ef73721ac7bcd79b2b315da7779d8fc09718c6b3d2d1b2d94850eb8c18432" -dependencies = [ - "log", - "ring", - "rustls-pki-types", - "rustls-webpki 0.102.2", - "subtle", - "zeroize", -] - -[[package]] -name = "rustls-native-certs" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f1fb85efa936c42c6d5fc28d2629bb51e4b2f4b8a5211e297d599cc5a093792" -dependencies = [ - "openssl-probe", - "rustls-pemfile 2.1.2", - "rustls-pki-types", - "schannel", - "security-framework", -] - [[package]] name = "rustls-pemfile" version = "1.0.4" @@ -2249,17 +2070,6 @@ dependencies = [ "untrusted", ] -[[package]] -name = "rustls-webpki" -version = "0.102.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "faaa0a62740bedb9b2ef5afa303da42764c012f743917351dc9a237ea1663610" -dependencies = [ - "ring", - "rustls-pki-types", - "untrusted", -] - [[package]] name = "rustversion" version = "1.0.14" @@ -2492,7 +2302,6 @@ dependencies = [ "futures-executor", "library", "reqwest", - "rs-firebase-admin-sdk", "sea-orm", "tracing", ] @@ -2658,7 +2467,7 @@ dependencies = [ "paste", "percent-encoding", "rust_decimal", - "rustls 0.21.10", + "rustls", "rustls-pemfile 1.0.4", "serde", "serde_json", @@ -3069,17 +2878,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-rustls" -version = "0.25.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "775e0c0f0adb3a2f22a00c4745d728b479985fc15ee7ca6a2608388c5569860f" -dependencies = [ - "rustls 0.22.4", - "rustls-pki-types", - "tokio", -] - [[package]] name = "tokio-stream" version = "0.1.14" @@ -3174,8 +2972,8 @@ checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "bitflags 2.4.2", "bytes", - "http 1.1.0", - "http-body 1.0.0", + "http", + "http-body", "http-body-util", "pin-project-lite", "tower-layer", @@ -3240,16 +3038,6 @@ dependencies = [ "valuable", ] -[[package]] -name = "tracing-futures" -version = "0.2.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97d095ae15e245a057c8e8451bab9b3ee1e1f68e9ba2b4fbc18d0ac5237835f2" -dependencies = [ - "pin-project", - "tracing", -] - [[package]] name = "tracing-log" version = "0.2.0" @@ -3544,18 +3332,6 @@ version = "0.25.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1" -[[package]] -name = "which" -version = "6.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8211e4f58a2b2805adfbefbc07bab82958fc91e3836339b1ab7ae32465dce0d7" -dependencies = [ - "either", - "home", - "rustix", - "winsafe", -] - [[package]] name = "whoami" version = "1.5.0" @@ -3757,12 +3533,6 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "winsafe" -version = "0.0.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d135d17ab770252ad95e9a872d365cf3090e3be864a34ab46f48555993efc904" - [[package]] name = "wyz" version = "0.5.1" diff --git a/service/Cargo.toml b/service/Cargo.toml index 01fe772..2efd837 100644 --- a/service/Cargo.toml +++ b/service/Cargo.toml @@ -9,7 +9,6 @@ edition = "2021" tracing = "0.1.40" chrono = "0.4.35" sea-orm = { version = "0.12.14", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] } -rs-firebase-admin-sdk = "2.0.0" reqwest = "0.12.4" futures-executor = "0.3.30" error-stack = "0.4.1" diff --git a/service/src/firebase_admin.rs b/service/src/firebase_admin.rs deleted file mode 100644 index 6e083cf..0000000 --- a/service/src/firebase_admin.rs +++ /dev/null @@ -1,62 +0,0 @@ -use std::sync::OnceLock; -use futures_executor::block_on; -use rs_firebase_admin_sdk::{ - auth::{FirebaseAuthService, UserIdentifiers}, - App, AuthenticationManager, -}; -use rs_firebase_admin_sdk::auth::token::{LiveTokenVerifier, TokenVerifier}; -use rs_firebase_admin_sdk::auth::token::cache::{HttpCache, PubKeys}; -use rs_firebase_admin_sdk::auth::token::jwt::JWToken; - -static LIVE_APP: OnceLock> = OnceLock::new(); - -static ID_TOKEN_VERIFIER: OnceLock>> = OnceLock::new(); - -fn get_app() -> &'static App { - LIVE_APP.get_or_init(|| block_on(async { - let gcp_service_account = AuthenticationManager::new().await.expect("创建authentication manager失败"); - App::live(gcp_service_account.into()).await.expect("创建live app失败") - })) -} - -fn get_id_token_verifier() -> &'static LiveTokenVerifier> { - ID_TOKEN_VERIFIER.get_or_init(|| block_on(async { - get_app().id_token_verifier().await.expect("创建id token verifier失败") - })) -} - -pub async fn verify_user_id_token(id_token: &str) -> Result { - match get_id_token_verifier().verify_token(id_token).await { - Ok(jwt_token) => { - Ok(jwt_token) - } - Err(error) => { - tracing::error!("校验id token失败: {:?}", error); - Err(error.to_string()) - } - } -} - -async fn test() { - // Load your GCP SA from env, see https://crates.io/crates/gcp_auth for more details - let gcp_service_account = AuthenticationManager::new().await.unwrap(); - // Create live (not emulated) context for Firebase app - let live_app = App::live(gcp_service_account.into()).await.unwrap(); - - let id_token_verifier = live_app.id_token_verifier().await.expect("Error while creating id token verifier"); - let verify_result = id_token_verifier.verify_token("").await.expect("Error while verifying token"); - // Create Firebase authentication admin client - let auth_admin = live_app.auth(); - - let user = auth_admin.get_user( - // Build a filter for finding the user - UserIdentifiers::builder() - .with_email("me@email.com".into()) - .build() - ) - .await - .expect("Error while fetching user") - .expect("User does not exist"); - - println!("User id: {}", user.uid); -} \ No newline at end of file diff --git a/service/src/lib.rs b/service/src/lib.rs index 8215c76..0ff037a 100644 --- a/service/src/lib.rs +++ b/service/src/lib.rs @@ -1,3 +1,2 @@ pub mod player_info; pub mod feedback; -pub mod firebase_admin; diff --git a/service/src/player_info.rs b/service/src/player_info.rs index e2f8bf6..81d3d78 100644 --- a/service/src/player_info.rs +++ b/service/src/player_info.rs @@ -5,7 +5,6 @@ use library::db; use library::resp::response::ResErr::{ErrPerm, ErrSystem}; use library::resp::response::{ResOK, ResResult}; use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, Set}; -use crate::firebase_admin; pub async fn register(req: PlayerInfoRegister) -> ResResult> { match PlayerInfo::find() @@ -24,14 +23,6 @@ pub async fn register(req: PlayerInfoRegister) -> ResResult> { } } - let verified_token = match firebase_admin::verify_user_id_token(req.id_token.unwrap().as_str()).await { - Ok(token) => token, - Err(err) => { - tracing::error!(error = ?err, "校验用户id token失败"); - return Err(ErrSystem(None)); - } - }; - let now = chrono::Local::now().naive_local(); let model = player_info::ActiveModel {