#msal #oauth #azure

msal_browser

Rust对msal-browser.js的WASM包装器

16个版本

0.2.7 2023年2月9日
0.2.6 2022年11月22日
0.2.4 2021年3月10日
0.2.3 2021年1月14日
0.1.8 2020年8月11日

134WebAssembly

Download history 58/week @ 2024-03-31

52 每月下载

MIT 许可证

1MB
15K SLoC

JavaScript 13K SLoC // 0.3% comments Rust 2.5K SLoC // 0.0% comments Shell 1 SLoC // 0.8% comments

Rust + WASM + msal-browser

Rust对msal-browser.js的包装。

方法名全部匹配 js,但使用蛇形命名法,但没有像 js 那样只有一个 PublicClientApplication 类型,而是有两个应用类型

  • PopupApp
  • RedirectApp

PopupApp 是默认功能:如果您想使用 RedirectApp,则它位于 redirect 功能之后

msal_browser = { version = "0.2.0", features = ["redirect"] }

有大量的 配置 选项,因此Rust端使用构建器模式。您还可以使用js Object 并调用 Configuration::unchecked_from

使用

const CLIENT_ID: &str = "CLIENT_ID";
const AUTHORITY: &str = "AUTHORITY";

// Setup App
let auth_options = BrowserAuthOptions::new(CLIENT_ID).set_authority(AUTHORITY);
let config = Configuration::new(auth_options);
let client_app = PopupApp::new(config);

// Define some scopes
let scopes = ["User.Read"];

// Login
let auth_res = client_app.login_popup().await.unwrap();
let auth_res = client_app.login_popup_with_scopes(&scopes).await.unwrap();

// Account Info
let account = client_app.get_account_by_username("username").unwrap();
let account = client_app.get_account_by_home_id("home_id").unwrap();
let accounts = &client_app.get_all_accounts();

// Requests
let auth_request = AuthorizationUrlRequest::new(&scopes[..]).set_login_hint(account.username());
let silent_request = SilentRequest::new(&scopes[..], &account);
let end_session_request = EndSessionRequest::new();

// SSO sign in
let sso_auth_result = client_app.sso_silent(&auth_request).await.unwrap();

// Popup token
let token = client_app.acquire_token_popup(&auth_request).await.unwrap();

// Silent token
let silent_token = client_app
    .acquire_token_silent(&silent_request)
    .await
    .unwrap();

// Logout
client_app.logout(None);

示例

有一个示例应用程序,它使用出色的 dominator DOM库。

测试

目前可以使用 ./run_tests.shwasm-pack test --safari --headless -- --features "popup redirect 运行测试

注意

需要安装node以构建。目前使用 --no-verify 发布到crates.io:这是因为 build.rs 需要安装所有节点模块才能成功运行,并且正在修改 OUT_DIR 外部的文件以构建 js。从版本2.12开始,他们切换到使用 preserveModules = true 3563,这意味着旧的 index.es.js 文件不存在,而是留下模块导入。因此现在我在Rust中使用 Rollup 生成所需的文件以与bindgen链接。

依赖项

~1–3.5MB
~65K SLoC