2个版本
0.1.1 | 2020年10月2日 |
---|---|
0.1.0 | 2020年10月2日 |
#988 in 认证
44KB
1K SLoC
此库基于yup-oauth2开发。许多文档注释仍然引用原始库。
此库可用于获取服务的OAuth2.0认证。
为了使您的应用程序使用此库,您需要通过遵循此指南(适用于Google服务)或连接到的API提供者的文档来获取应用程序ID和密钥。
服务帐户"流程"
在使用服务帐户凭据时,无需用户交互。可以通过客户端的私钥(您可以从API提供者处下载)自动获取访问令牌。请参阅service_account
以获取如何使用服务帐户凭据的示例。请参阅developers.google.com以获取协议的详细描述。此crate基于Google API实现OAuth for Service Accounts;它可能与其他提供者不兼容。
返回的Token
将存储在内存中,以授权对相同作用域的将来API请求。在创建认证器时,可以通过使用persist_tokens_to_disk
将令牌可选地持久化到磁盘。
以下示例展示了如何使用此crate的基本方法
use service_authenticator::parse_service_key;
use service_authenticator::AuthenticatorBuilder as AB;
static SERVICE_CREDENTIALS:&[u8] = include_bytes!("path to jour credentials.json");
// The clientsecret file contains JSON like `{"type":"service_account", "project_id":"my-super-project", ...}`
#[tokio::main]
async fn main() {
let service_key = parse_service_key(SERVICE_CREDENTIALS)
.expect("bad gmail credentials");
let authenticator = AB::with_service_key(service_key, ACCOUNT_EMAIL)
.build()
.await
.expect("failed to create authenticator");
// once you have authenticator, you can ask for the authorization header
// for any scopes your service account is approved
let scopes = &["https://www.googleapis.com/auth/gmail.send"];
let authorization_header = authenticator
.header(GMAIL_SCOPES)
.await
.expect("Failed to get authorization token");
// now with the authorization header you can send api requests
let mut resp = authenticator
.client
.post("https:://gmail.googleapis.com/gmail/v1/users/USEREMAIL/messages/send")
.header("Content-Type", "application/json")
.header("Authorization", authorization_header.as_str())
.send_body(r#"{"raw": "base64 encoded email message"}"#)
.await
.expect("response error");
println!("Status:{}", resp.status());
match resp.body().await {
Ok(b) => println!("Body:{:?}", &b),
Err(e) => println!("Err:{:?}", e),
}
Ok(())
}
依赖关系
~37MB
~849K SLoC