16个不稳定版本 (6个破坏性更新)
0.7.0 | 2023年7月30日 |
---|---|
0.6.1 | 2023年4月20日 |
0.5.0 | 2023年2月8日 |
0.4.5 | 2022年11月17日 |
0.1.1 | 2021年4月20日 |
在身份验证类别中排名211
38KB
382 行
okta-jwt-verifier
该库的目的是帮助验证由Okta签发的访问和ID令牌。有关详细信息,请参阅API文档。
最低支持的Rust版本(MSRV)
1.65.0
安装
cargo add okta-jwt-verifier
示例
最小示例
此示例尝试从提供的Okta授权服务器检索密钥,解码令牌头以识别密钥ID,尝试找到匹配的密钥,尝试解码令牌,并最终尝试反序列化声明。
除非启用了缓存功能,否则此方法将在每次请求时尝试检索密钥。
use okta_jwt_verifier::{Verifier, DefaultClaims};
#[async_std::main]
async fn main() -> anyhow::Result<()> {
let token = "token";
let issuer = "https://your.domain/oauth2/default";
Verifier::new(&issuer)
.await?
.verify::<DefaultClaims>(&token)
.await?;
Ok(())
}
可选配置
此方法将尝试使用提供的端点检索密钥(默认:"/v1/keys")
use okta_jwt_verifier::{Config, Verifier, DefaultClaims};
#[async_std::main]
async fn main() -> anyhow::Result<()> {
let token = "token";
let issuer = "https://your.domain/oauth2/default";
let config: Config =
Config { keys_endpoint: Some("/oauth2/v1/keys".to_owned()) };
Verifier::new_with_config(&issuer, config)
.await?
.verify::<DefaultClaims>(&token)
.await?;
Ok(())
}
此示例展示了验证的可选配置的使用。
use okta_jwt_verifier::Verifier;
use serde::{Deserialize, Serialize};
use std::collections::HashSet;
// You can provide your own Claims struct or use the provided defaults
// This example matches okta_jwt_verifier::DefaultClaims
#[derive(Serialize, Deserialize)]
pub struct Claims {
pub iss: String,
pub sub: String,
pub scp: Option<Vec<String>>,
pub cid: Option<String>,
pub uid: Option<String>,
pub exp: u64,
pub iat: u64,
}
let token = "token";
let issuer = "https://your.domain/oauth2/default";
let mut aud = HashSet::new();
aud.insert("api://default");
aud.insert("api://test");
let claims = Verifier::new(&issuer)
.await?
// An optional leeway (in seconds) can be provided to account for clock skew (default: 120)
.leeway(0)
// Optional audience claims can be provided to validate against
.audience(aud)
// Adding a single aud entry without building a HashSet manually
.add_audience("api://dev")
// An optional client ID can be provided to match against the cid claim
.client_id("Bl3hStrINgiD")
.verify::<Claims>(&token)
.await?;
dbg!(&claims)
密钥缓存
此示例与基本示例相同,但会缓存密钥到磁盘。需要启用cache-surf
或cache-reqwest
功能(默认禁用)。在当前工作目录中创建一个http-cacache
目录,其中将存储缓存文件。
对于surf
cargo add okta-jwt-verifier --features cache-surf
对于reqwest
cargo add okta-jwt-verifier --no-default-features --features client-reqwest,cache-reqwest
Tide中间件
此示例将基本用法示例实现为tide中间件。
ISSUER="https://your.domain/oauth2/default" cargo run --example tide_middleware_basic
功能
以下功能可用。默认启用client-surf
。
client-surf
功能,启用远程请求的surf
客户端。默认启用。cache-surf
功能,启用使用surf
客户端时的磁盘缓存以存储密钥(尊重缓存控制)。默认禁用。client-reqwest
功能,启用远程请求的reqwest
客户端。默认禁用。cache-reqwest
功能,允许在reqwest
客户端使用时在磁盘上缓存键(尊重缓存控制)。默认情况下是禁用的。
文档
许可证
许可方式:
- Apache License,版本 2.0 (LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非你明确声明,否则根据 Apache-2.0 许可证定义,你提交的任何有意包含在作品中的贡献,应按上述方式双重许可,不附加任何额外条款或条件。
依赖
~7–23MB
~397K SLoC