#openid #openid-connect #client #web #http-client

oidc

使用 Reqwest、Biscuit 和 inth-oauth2 的 OpenID Connect 客户端库

3 个版本 (破坏性)

0.3.0 2019 年 9 月 22 日
0.2.0 2018 年 12 月 6 日
0.1.0 2018 年 10 月 30 日

#7 in #openid-connect

每月 23 次下载

Apache-2.0

42KB
806

OpenID Connect 客户端 & 发现

基于 inth-oauth2 构建。使用 reqwest 作为 HTTP 客户端,并使用 biscuit 进行 JavaScript 对象签名和加密 (JOSE)。

实现 OpenID Connect 核心版 1.0OpenID Connect 发现 1.0

文档

许可证

Apache 许可证,版本 2.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