#google-cloud-platform #gcp #authentication #google-api

gcpauth

Google Cloud Platform 服务器应用程序身份验证库

3 个版本

0.1.2 2021年7月30日
0.1.1 2021年7月29日
0.1.0 2021年7月29日

#8 in #google-cloud-platform

自定义许可

27KB
593

gcpauth

Google Cloud Platform 服务器应用程序身份验证库。

CI

安装

[dependencies]
gcpauth = 0.1.2

或者获取最新分支。

[dependencies]
gcpauth = { git = "https://github.com/yoshidan/gcpauth/", branch = "main"}

快速入门

use gcpauth::*;

#[tokio::main]
async fn main() -> Result<(), error::Error> {
    let audience = "https://spanner.googleapis.com/";
    let scopes = [
        "https://www.googleapis.com/auth/cloud-platform",
        "https://www.googleapis.com/auth/spanner.data",
    ];
    let config = Config {
        // audience is required only for service account jwt-auth
        // https://developers.google.com/identity/protocols/oauth2/service-account#jwt-auth
        audience: Some(audience),
        // scopes is required only for service account Oauth2 
        // https://developers.google.com/identity/protocols/oauth2/service-account
        scopes: Some(&scopes) 
    };
    let ts = create_token_source(config).await?;  
    let token = ts.token().await?;
    println!("token is {}",token.access_token);
    Ok(())
}

create_token_source 会按以下顺序查找凭证,优先查找第一个找到的位置

  1. 一个由 GOOGLE_APPLICATION_CREDENTIALS 环境变量指定的路径的 JSON 文件。
  2. 一个 gcloud 命令行工具已知的位置的 JSON 文件。在 Windows 上,这是 %APPDATA%/gcloud/application_default_credentials.json。在其他系统上,$HOME/.config/gcloud/application_default_credentials.json。
  3. 在 Google Compute Engine 上,它会从元数据服务器获取凭证。

异步初始化

use gcpauth::*;
use tokio::sync::OnceCell;

static AUTHENTICATOR: OnceCell<Box<dyn gcpauth::token::TokenSource>> = OnceCell::const_new();

#[tokio::main]
async fn main() -> Result<(),error::Error> {
    let ts = AUTHENTICATOR.get_or_try_init(|| {
        gcpauth::create_token_source(gcpauth::Config {
            audience: Some("https://spanner.googleapis.com/"),
            scopes: None,
        })
    }).await?;
    let token = ts.token().await?;
    println!("token is {}",token.access_token);
    Ok(())
}

支持的凭证

支持的工作负载身份

https://cloud.google.com/iam/docs/workload-identity-federation

  • AWS
  • Azure Active Directory
  • 本地 Active Directory
  • Okta
  • Kubernetes 集群

依赖项

~16–30MB
~549K SLoC