3 个版本 (破坏性)
0.3.0 | 2019 年 9 月 22 日 |
---|---|
0.2.0 | 2018 年 12 月 6 日 |
0.1.0 | 2018 年 10 月 30 日 |
#7 in #openid-connect
每月 23 次下载
42KB
806 行
OpenID Connect 客户端 & 发现
基于 inth-oauth2 构建。使用 reqwest 作为 HTTP 客户端,并使用 biscuit 进行 JavaScript 对象签名和加密 (JOSE)。
实现 OpenID Connect 核心版 1.0 和 OpenID Connect 发现 1.0。
文档
许可证
lib.rs
:
OpenID Connect 客户端
与该库交互有两种方式 - 预装的魔法方法和稍微复杂的细粒度方法。对于大多数用户来说,前者是您想要的
use oidc;
use reqwest;
use std::default::Default;
let id = "my client".to_string();
let secret = "a secret to everybody".to_string();
let redirect = reqwest::Url::parse("https://my-redirect.foo/dest")?;
let issuer = oidc::issuer::google();
let client = oidc::Client::discover(id, secret, redirect, issuer)?;
let auth_url = client.auth_url(&Default::default());
// ... send your user to auth_url, get an auth_code back at your redirect url handler
let token = client.authenticate(auth_code, None, None)?;
该示例为您提供了一个经过验证的解码 Token
。您的用户已认证!
您还可以采取更细致的方法,这为您提供了更多细粒度的控制
use oidc;
use reqwest;
use std::default::Default;
let id = "my client".to_string();
let secret = "a secret to everybody".to_string();
let redirect = reqwest::Url::parse("https://my-redirect.foo/dest")?;
let issuer = oidc::issuer::google();
let http = reqwest::Client::new();
let config = oidc::discovery::discover(&http, issuer)?;
let jwks = oidc::discovery::jwks(&http, config.jwks_uri.clone())?;
let provider = oidc::discovery::Discovered(config);
let client = oidc::new(id, secret, redirect, provider, jwks);
let auth_url = client.auth_url(Default::default());
// ... send your user to auth_url, get an auth_code back at your redirect url handler
let mut token = client.request_token(&http, auth_code)?;
client.decode_token(&mut token)?;
client.validate_token(&token, None, None)?;
let userinfo = client.request_userinfo(&http, &token)?;
这个更复杂版本直接使用了发现模块。两种方法之间的重要区别
- 复杂的模式避免了每次调用出站方法时都构建一个新的 reqwest 客户端。特别是对于令牌解码,每次都需要重建 reqwest 可能会带来很大的性能损失。
- 令牌不是解码或验证过的。您需要手动进行这两步。
- 此版本演示了用户信息。规范不要求它,所以请确保它可用!(如果没有,您将得到 Error::Userinfo::Nourl)
依赖项
~32MB
~751K SLoC