4个版本
新版本 0.2.0 | 2024年8月16日 |
---|---|
0.1.2 | 2024年7月9日 |
0.1.1 | 2024年7月9日 |
0.1.0 | 2024年7月5日 |
#207 in HTTP客户端
197 每月下载次数
47KB
910 行
仅适用于Unix的 oidc-agent
库,用于Rust
描述
此crate是oidc-agent
IPC-API的接口。
必须以用户系统运行oidc-agent
,并且必须正确导出OIDC_SOCK。
获取access_token
基本用法
要使用帐户简称获取access_token,请在main.rs
中运行以下代码
use oidc_agent_rs::{Agent, Error};
fn main() -> Result<(), Error> {
let agent = Agent::new()?;
let access_token = agent.get_access_token("profile_shortname")?;
println!("{}", access_token.secret());
Ok(())
}
需要使用secret()
方法以&str
值的形式获取令牌。否则将返回Token
伪结构体。
异步用法
对于异步编程,您需要启用async
功能并使用crate::async_impl::Agent
。以下是一个异步获取access_token的基本示例
use oidc_agent_rs::async_impl::Agent;
use oidc_agent_rs::Error;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let agent = Agent::new().await?;
let at = agent.get_access_token("profile_shortname").await?;
println!("{}", at.secret());
Ok(())
}
Cargo.toml
[dependencies]
oidc_agent_rs = { version = "0.2.0", features=["async"]}
tokio = { version = "1.39.2", features = ["net", "io-util", "macros", "rt-multi-thread"] }
高级请求
要使用更高级的选项获取access_token,您必须使用请求构建器。 AccessTokenRequest
有一个方法来轻松构建新的请求。然后您必须直接将请求发送到代理并解析响应。
示例
use oidc_agent_rs::{requests::AccessTokenRequest, Agent, Error};
fn main() -> Result<(), Error> {
let agent = Agent::new()?;
//obtaining access_token by issuer only (no shortname needed)
let at_request = AccessTokenRequest::builder()
.issuer("https://issuer.url")?
.min_valid_period(60)
.build()?;
let at_response = agent.send_request(at_request)?;
println!("{}", at_response.access_token().secret());
println!("{}", at_response.issuer());
println!("{}", at_response.expires_at());
Ok(())
}
获取mytoken
基本用法
仅使用帐户简称获取mytoken与获取access_token非常相似。
示例
use oidc_agent_rs::{Agent, Error};
fn main() -> Result<(), Error> {
let agent = Agent::new()?;
let mytoken = agent.get_mytoken("mytoken")?;
println!("{}", mytoken.secret());
Ok(())
}
再次使用secret()方法以&str值的形式获取令牌。
高级请求
如果您想使用特定的Mytoken配置文件获取新的mytoken,您必须创建新的Profile
元素。支持所有在Mytoken文档中记录的配置文件对象。您可以将多个Capability
和Restriction
元素以及单个Rotation
元素添加到Profile
中。然后,将Profile
元素添加到MyTokenRequest
元素中。
示例
use oidc_agent_rs::mytoken::{Capability, Profile, Restriction, Rotation, TokenInfoPerms};
use oidc_agent_rs::requests::MyTokenRequest;
use oidc_agent_rs::{Agent, Error};
fn main() -> Result<(), Error> {
let agent = Agent::new()?;
let mut profile = Profile::new();
//basic capabilites
let caps = vec![Capability::AT, Capability::TokenInfo(TokenInfoPerms::All)];
//new restriction
let restriction = Restriction::builder()
.usages_AT(5) //number of mytoken max usages
.add_geoip_allow(vec!["pl", "de"]) //geoip allowed regions
.build();
//basic rotation
let rotation = Rotation::builder().set_on_AT().set_lifetime(1000).build()?;
profile.add_capabilities(&caps);
profile.add_restrictions(&vec![restriction]);
profile.set_rotation(&rotation);
let mt_request = MyTokenRequest::builder("mytoken")
.mytoken_profile(&profile)
.build()?;
let mt_response = agent.send_request(mt_request)?;
println!("{}", mt_response.mytoken().secret());
Ok(())
}
依赖关系
~3–13MB
~158K SLoC