rullst-connect

本サイトが提示する下記のベストプラクティスを実行するプロジェクトは、Open Source Security Foundation (OpenSSF) バッジを達成したことを自主的に自己認証し、そのことを外部に示すことができます。

ソフトウェアに欠陥や脆弱性がないことを保証する手立てはありません。形式論的な証明ができたとしても、仕様や前提が間違っていると誤動作の可能性があります。また、プロジェクトが健全で、かつ機能的な開発コミュニティであり続けることを保証する手立てもありません。しかし、ベストプラクティスの採用は、プロジェクトの成果の向上に寄与する可能性があります。たとえば、いくつものベストプラクティスがリリース前の複数人によるレビューを定めていますが、それによりレビュー以外では発見困難な技術的脆弱性を見つけるのを助け、同時に異なる企業の開発者間の信頼を築き、さらに交流を続けることに対する意欲を生んでいます。バッジを獲得するには、すべてのMUSTおよびMUST NOT基準を満たさなければなりません。すべてのSHOULD基準も満たさなければなりませんが、正当な理由がある場合は満たさなくても構いません。そしてすべてのSUGGESTED基準も満たさなければなりませんが、満たさないとしても、少なくとも考慮することが望まれます。フィードバックは、 GitHubサイトのissueまたはpull requestとして提示されれば歓迎します。また、議論のためのメールリストも用意されています。

私たちは多言語で情報を提供していますが、翻訳版に矛盾や意味の不一致がある場合は、英語版を正式な記述とします。
これがあなたのプロジェクトである場合は、プロジェクトページにベースラインバッジステータスを表示してください!ベースラインバッジステータスは次のようになります: プロジェクト13360のベースラインバッジレベルはin_progressです ベースラインバッジを埋め込む方法は次のとおりです:
ベースラインバッジステータスを表示するには、マークダウンファイルに以下を埋め込みます:
[![OpenSSF Baseline](https://www.bestpractices.dev/projects/13360/baseline)](https://www.bestpractices.dev/projects/13360)
または、HTMLに以下を埋め込みます:
<a href="https://www.bestpractices.dev/projects/13360"><img src="https://www.bestpractices.dev/projects/13360/baseline"></a>


これらはベースラインレベル1の基準です。 これらは基準バージョン v2026.02.19 の評価項目です。

Baseline Series: ベースラインレベル1 ベースラインレベル2 ベースラインレベル3

        

 基本的情報

  • 一般

    他のプロジェクトが同じ名前を使用していないか注意してください。

    Rust Connect is an elegant, async-first, and Developer Experience (DX) focused OAuth2 authentication library for Rust,

    SPDXライセンスの表現形式を使用してください。 例:「Apache-2.0」、「BSD-2-Clause」、「BSD-3-Clause」、「GPL-2.0+」、「LGPL-3.0+」、「MIT」、「(BSD-2-Clause OR Ruby)」。一重引用符または二重引用符を含めないでください。
    複数の言語がある場合は、コンマを区切り(スペースを入れてもよい)としてリストし、使用頻度の高いものから順に並べます。使用言語が多くある場合は、少なくとも最初の3つの最も多く使われるものをリストアップしてください。言語がない場合(例:ドキュメントだけ、またはテスト専用のプロジェクトの場合)、1文字 " - "を使用します。言語ごとにある大文字・小文字の慣用を踏襲してください(例:「JavaScript」)。
    Common Platform Enumeration(CPE)は、情報技術(IT)システム、ソフトウェア、およびパッケージのための構造化された命名体系です。脆弱性を報告する際に、多くのシステムやデータベースで使用されています。

    Rullst Connect 🦀

    Crates.io
    Downloads
    Documentation
    License: MIT
    Rust Version

    Rullst Connect is an elegant, async-first, and Developer Experience (DX) focused OAuth2 authentication library for Rust. It simplifies the integration of social logins into your Rust web applications, providing a standardized interface across multiple providers.

    🛡️ Quality & Security Audits

    CI & Coverage Security & Analysis Formal & Advanced Testing
    CI Build<br>Coverage<br>Spellcheck CodeQL<br>Cargo Deny<br>Machete<br>OpenSSF Scorecard Fuzz Testing<br>Mutants<br>Kani
    Publish Semver Checks Zero Panics<br>Audit: 10/10

    ✨ Features

    • 🚀 Async & Fast: Built on top of tokio and reqwest.
    • 🧩 Standardized: All providers return a unified ConnectUser struct.
    • 🛡️ Type-Safe: Robust error handling using thiserror (ConnectError).
    • 🔌 Framework Agnostic: Works seamlessly with Rullst, Axum, Actix, Leptos, Dioxus, or any other framework.
    • 🔐 Enterprise Security: Built-in OIDC Discovery, JWKS validation, and automated CSRF tower-sessions.
    • 📺 Device Flow: Native RFC 8628 support for headless CLI and Smart TV auth.
    • 🛠️ Testing: Embedded Mock IdP router for seamless offline local E2E testing.

    📚 Important Documents:

    📦 Supported Providers

    Official support for 11 core providers:

    1. Google
    2. GitHub
    3. Microsoft / Azure AD
    4. Apple (Sign in with Apple)
    5. Auth0
    6. AWS Cognito
    7. Facebook
    8. X (Twitter) (Strict PKCE requirement)
    9. Discord
    10. LinkedIn
    11. OIDC (OpenID Connect Custom Provider)

    🛠️ Installation

    Add the package to your Cargo.toml. If you use Rullst, Axum, Actix, or Leptos, you can enable their specific features for native Extractor support!

    You can either run:

    cargo add rullst-connect
    

    Or manually add it to your Cargo.toml:

    [dependencies]
    rullst-connect = "10.0.1"
    tokio = { version = "1.52", features = ["full"] }
    

    🚀 Quick Start

    1. Initialize the Provider

    Choose your provider and pass your credentials and callback URL:

    use rullst_connect::prelude::*;
    
    let github = GithubProvider::new(
        "YOUR_CLIENT_ID".to_string(),
        "YOUR_CLIENT_SECRET".to_string(),
        "http://localhost:3000/auth/github/callback".to_string(),
    );
    

    2. Redirect the User

    Get the authorization URL and redirect your user:

    let url = github.redirect_url();
    // Example in Axum: return Redirect::temporary(&url);
    

    3. Handle the Callback & Get User

    When the user returns to your callback URL with a code query parameter, exchange it for a ConnectUser:

    let params = rullst_connect::provider::ExchangeParams {
        auth_code: code,
        ..Default::default()
    };
    match github.get_user(params).await {
        Ok(user) => {
            println!("Welcome, {}!", user.name);
            println!("Email: {:?}", user.email);
            println!("Avatar: {:?}", user.avatar_url);
        }
        Err(_) => return (StatusCode::INTERNAL_SERVER_ERROR, "Failed to get user".to_string()),
    }
    

    🛡️ CSRF Protection (State Parameter)

    To prevent Cross-Site Request Forgery (CSRF) attacks, you should generate a secure random string, save it in a session/cookie, and pass it to the provider.

    // 1. Generate a random state string and save it in the session
    let state = "random_secure_string";
    
    // 2. Get the authorization URL with the state parameter using the builder
    let url = github.with_state(state).redirect_url();
    // return Redirect::temporary(&url);
    
    // 3. In the callback route, verify if the query param `state` matches your session!
    // If you are using the optional `axum` or `actix` features, you can use `verify_state`:
    // params.verify_state(&state_from_session)?;
    

    🔄 Refreshing Tokens

    If an access token expires, you can seamlessly renew it without asking the user to login again by using their refresh_token:

    let refreshed_user = github.refresh_token("existing_refresh_token_string").await?;
    // Tokens are wrapped in `secrecy::SecretString` to prevent accidental log leakage ([REDACTED]).
    // When you need to send it to an API, expose it explicitly:
    use secrecy::ExposeSecret;
    let raw_token = refreshed_user.access_token.expose_secret();
    println!("Successfully refreshed token securely!");
    

    🔒 PKCE Support (v9.0.0+)

    All providers natively support PKCE (Proof Key for Code Exchange) to mitigate authorization code interception attacks. Some providers like X (Twitter) v2 strictly require it.

    use rullst_connect::pkce::generate_pkce;
    
    // 1. Generate challenge and verifier
    let (code_verifier, code_challenge) = generate_pkce();
    
    // 2. Save `code_verifier` in the user's session or a secure HttpOnly cookie!
    
    // 3. Get the URL with PKCE natively using the builder pattern
    let auth_url = provider.with_pkce(&code_challenge).redirect_url();
    
    // 4. In the callback route, fetch the user using the saved verifier:
    let params = rullst_connect::provider::ExchangeParams {
        auth_code: &code,
        code_verifier: Some(&code_verifier),
        ..Default::default()
    };
    let user = provider.get_user(params).await.unwrap();
    

    🧑‍💻 Full Example with Axum

    You can find a complete working server using the Axum framework in the examples directory. Just run:

    cargo run --example axum_server
    

    📦 Releasing a New Version

    This project uses cargo-release to automate version bumps, README synchronization, and CHANGELOG management.
    The publish workflow in .github/workflows/publish.yml runs when a vX.Y.Z tag is pushed, and it can also be triggered manually from GitHub Actions.

    To release a new version, simply run:

    # install it first if you haven't: cargo install cargo-release
    cargo release patch --execute  # for v1.0.x patches
    cargo release minor --execute  # for v1.x.0 features
    cargo release major --execute  # for vX.0.0 breaking changes
    

    This will automatically bump versions, tag the release, and push to GitHub, triggering the crates.io publish workflow.

    For the exact release checklist and what to do next time, see RELEASING.md.

    🤝 Contributing

    Feel free to open Issues and submit Pull Requests! Want to add a new provider? It's easy! Just implement the Provider trait.

    <!-- ## Contributors ✨ Thanks! <a href="https://github.com/Rullst/rullst-connect/graphs/contributors"> <img src="https://contrib.rocks/image?repo=Rullst/rullst-connect" /> </a> -->

    📄 License

    This project is licensed under the MIT License.

 管理策 0/24

  • 管理策


    ユーザーがプロジェクトの権威リポジトリにある機密リソースを読み取ったり変更したりしようとする場合、システムは多要素認証プロセスの完了をユーザーに要求しなければなりません。 [OSPS-AC-01.01]
    プロジェクトのバージョン管理システムに多要素認証を強制し、協力者が機密データにアクセスしたりリポジトリ設定を変更したりする際に第2の認証形式を提供するよう要求します。パスキーはこの管理として許容されます。


    新しい協力者が追加される場合、バージョン管理システムは手動による権限割り当てを要求するか、デフォルトで協力者の権限を最低利用可能な特権に制限しなければなりません。 [OSPS-AC-02.01]
    ほとんどの公開バージョン管理システムは、この方法で設定されています。プロジェクトのバージョン管理システムが、協力者を追加する際にデフォルトで常に利用可能な最低限の権限を割り当て、必要な場合にのみ追加の権限を付与するように設定してください。


    プロジェクトのプライマリブランチに直接コミットが試行された場合、強制メカニズムが変更の適用を防止しなければなりません。 [OSPS-AC-03.01]
    バージョン管理システムが集中型の場合は、プロジェクトのバージョン管理システムのプライマリブランチにブランチ保護を設定してください。あるいは、Linuxカーネルのような分散型アプローチを使用します。この場合、変更はまず別のリポジトリで提案され、プライマリリポジトリへの変更のマージには特定の個別の操作が必要です。


    プロジェクトのプライマリブランチの削除が試行された場合、バージョン管理システムはこれを機密性の高い活動として扱い、意図の明示的な確認を要求しなければなりません。 [OSPS-AC-03.02]
    プロジェクトのバージョン管理システムのプライマリブランチにブランチ保護を設定して削除を防止してください。


    CI/CDパイプラインが入力パラメータを受け取る場合、そのパラメータはパイプラインで使用する前にサニタイズおよび検証されなければなりません。 [OSPS-BR-01.01]
    CI/CDパイプラインは、信頼できないソースに対応するすべてのメタデータ入力をサニタイズ(期待値の引用、エスケープ、または終了)する必要があります。これには、ブランチ名、コミットメッセージ、タグ、プルリクエストのタイトル、作者情報などのデータが含まれます。


    CI/CDパイプラインが信頼されていないコードスナップショットで動作する場合、特権のあるCI/CDクレデンシャルおよびアセットへのアクセスを防止しなければなりません。 [OSPS-BR-01.03]
    CI/CDパイプラインは、信頼されていないコードスナップショットを特権のあるクレデンシャルおよびアセットから分離する必要があります。特に、プロジェクトは、協力者によるレビュー前にコードをビルドまたは実行するワークフローがCI/CDクレデンシャルにアクセスできないよう注意する必要があります。


    プロジェクトがURIを公式プロジェクトチャンネルとしてリストする場合、そのURIは暗号化されたチャンネルを使用して排他的に配信されなければなりません。 [OSPS-BR-03.01]
    プロジェクトのウェブサイトおよびバージョン管理システムを、データ送信にSSHまたはHTTPSなどの暗号化されたチャンネルを使用するように設定してください。プロジェクトドキュメントで参照されるすべてのツールとドメインが、暗号化されたチャンネルを介してのみアクセスできるようにしてください。


    プロジェクトがURIを公式配布チャンネルとしてリストする場合、そのURIは暗号化されたチャンネルを使用して排他的に配信されなければなりません。 [OSPS-BR-03.02]
    プロジェクトのリリースパイプラインを、SSHまたはHTTPSなどの暗号化されたチャンネルを使用してデータ送信を行うウェブサイト、APIレスポンス、およびその他のサービスからのみデータを取得するように設定してください。


    プロジェクトは、シークレットや認証情報などの暗号化されていない機密データが、バージョン管理システムに意図せず保存されることを防止しなければなりません。 [OSPS-BR-07.01]
    機密情報を含む可能性のあるファイルを除外するために、.gitignoreまたは同等のものを設定してください。プリコミットフックおよび自動スキャンツールを使用して、コミットに機密データが含まれることを検出および防止してください。


    プロジェクトがリリースを行った場合、プロジェクトドキュメントには、すべての基本機能に対するユーザーガイドを含まなければなりません。 [OSPS-DO-01.01]
    プロジェクトのすべての基本機能について、インストール、設定、およびプロジェクトの機能の使用方法を説明するユーザーガイドまたはドキュメントを作成してください。既知の危険な行為または破壊的な行為が利用可能な場合は、非常に目立つ警告を含めてください。


    プロジェクトがリリースを行った場合、プロジェクトドキュメントには、欠陥報告のためのガイドを含まなければなりません。 [OSPS-DO-02.01]
    プロジェクトでは、バージョン管理システムのデフォルトの課題追跡ツールを使用することをお勧めします。外部ソースが使用される場合は、プロジェクトドキュメントと貢献ガイドで報告システムの使用方法を明確かつ目立つように説明してください。プロジェクトドキュメントでは、欠陥がどのようにトリアージおよび解決されるかについての期待値を設定することもお勧めします。


    アクティブな間、プロジェクトには、提案された変更および使用上の障害に関する公開討論のための1つ以上のメカニズムがなければなりません。 [OSPS-GV-02.01]
    メーリングリスト、インスタントメッセージング、または課題追跡ツールなど、プロジェクト内の公開討論のための1つ以上のメカニズムを確立し、オープンなコミュニケーションとフィードバックを促進してください。


    アクティブな間、プロジェクトドキュメントには、貢献プロセスの説明を含まなければなりません。 [OSPS-GV-03.01]
    変更の提出手順やプロジェクトメンテナーとのやり取りを含む、貢献プロセスの概要を示すCONTRIBUTING.mdまたはCONTRIBUTING/ディレクトリを作成します。


    アクティブな間、ソースコードのライセンスはOSIオープンソース定義またはFSFフリーソフトウェア定義を満たす必要があります。 [OSPS-LE-02.01]
    OSI(Open Source Initiative)によって承認されたライセンス、またはFSF(Free Software Foundation)によって承認されたフリーライセンスを含むLICENSEファイルをプロジェクトのリポジトリに追加します。そのようなライセンスの例としては、MIT、BSD 2-clause、BSD 3-clause revised、Apache 2.0、Lesser GNU General Public License(LGPL)、およびGNU General Public License(GPL)が含まれます。特許などの他の障害がない場合、パブリックドメインへのリリースはこの管理を満たします。


    アクティブな間、リリースされたソフトウェア資産のライセンスはOSIオープンソース定義またはFSFフリーソフトウェア定義を満たす必要があります。 [OSPS-LE-02.02]
    リリースされたソフトウェア資産に異なるライセンスが含まれている場合は、OSI(Open Source Initiative)によって承認されたライセンス、またはFSF(Free Software Foundation)によって承認されたフリーライセンスであることを確認してください。そのようなライセンスの例としては、MIT、BSD 2-clause、BSD 3-clause revised、Apache 2.0、Lesser GNU General Public License(LGPL)、およびGNU General Public License(GPL)が含まれます。リリースされたソフトウェア資産のライセンスはソースコードとは異なる場合があることに注意してください。


    アクティブな間、ソースコードのライセンスは、対応するリポジトリのLICENSEファイル、COPYINGファイル、またはLICENSE/ディレクトリに維持される必要があります。 [OSPS-LE-03.01]
    ライセンス条件に関する可視性と明確性を提供するために、プロジェクトのソースコードライセンスをプロジェクトのLICENSEファイル、COPYINGファイル、またはLICENSE/ディレクトリに含めます。ファイル名には拡張子を付けることができます。プロジェクトに複数のリポジトリがある場合は、各リポジトリにライセンスファイルが含まれていることを確認してください。


    アクティブな間、リリースされたソフトウェア資産のライセンスは、リリースされたソースコードに、またはリリース資産と一緒にあるLICENSEファイル、COPYINGファイル、またはLICENSE/ディレクトリに含まれている必要があります。 [OSPS-LE-03.02]
    ライセンス条件に関する可視性と明確性を提供するために、プロジェクトのリリースされたソフトウェア資産のライセンスを、リリースされたソースコードに、または対応するリリース資産と一緒にあるLICENSEファイル、COPYINGファイル、またはLICENSE/ディレクトリに含めます。ファイル名には拡張子を付けることができます。プロジェクトに複数のリポジトリがある場合は、各リポジトリにライセンスファイルが含まれていることを確認してください。


    アクティブな間、プロジェクトのソースコードリポジトリは、静的URLで公開読み取り可能である必要があります。 [OSPS-QA-01.01]
    GitHub、GitLab、Bitbucketなどの一般的なVCSを使用します。リポジトリが公開読み取り可能であることを確認してください。主要なソースを明確にする可視性の高いドキュメントがない限り、リポジトリの複製またはミラーリングを避けてください。リポジトリURLに影響を与える可能性のある頻繁なリポジトリの変更を避けてください。リポジトリが公開されていることを確認してください。


    バージョン管理システムには、行われたすべての変更、誰が変更を行ったか、いつ変更が行われたかの公開読み取り可能な記録が含まれている必要があります。 [OSPS-QA-01.02]
    GitHub、GitLab、Bitbucketなどの一般的なVCSを使用して、公開読み取り可能なコミット履歴を維持します。コミットの作成者が不明瞭になるような方法でコミットをスカッシュまたは書き換えることは避けてください。


    パッケージ管理システムがサポートしている場合、ソースコードリポジトリには、直接の言語依存関係を説明する依存関係リストが含まれている必要があります。 [OSPS-QA-02.01]
    これは、package.json、Gemfile、go.modなど、すべての直接依存関係を列挙するパッケージマネージャーまたは言語依存関係ファイルの形式を取ることができます。


    アクティブな間、プロジェクトのドキュメントには、サブプロジェクトと見なされるコードベースのリストが含まれている必要があります。 [OSPS-QA-04.01]
    プロジェクトによって生成され、リリースにコンパイルされる追加のサブプロジェクトコードリポジトリを文書化します。このドキュメントには、それぞれのコードベースのステータスと意図を含める必要があります。


    アクティブな間、バージョン管理システムには、生成された実行可能アーティファクトを含めてはなりません。 [OSPS-QA-05.01]
    プロジェクトのバージョン管理システムで生成された実行可能アーティファクトを削除します。生成された実行可能アーティファクトがテストなどのプロセスで重要と思われるシナリオでは、代わりにビルド時に生成するか、別に保存して、明確に文書化されたパイプライン ステップ中に取得する必要があることが推奨されます。


    アクティブな間、バージョン管理システムには、レビュー不可能なバイナリアーティファクトを含めてはなりません。 [OSPS-QA-05.02]
    プロジェクトのバージョン管理システムにレビュー不可能なバイナリアーティファクトを追加しないでください。これには、実行可能なアプリケーションバイナリ、ライブラリファイル、および同様のアーティファクトが含まれます。これには、グラフィック画像、音声や音楽ファイル、および通常バイナリ形式で保存されるコンテンツなどのアセットは含まれません。


    有効な間、プロジェクトのドキュメントにはセキュリティ連絡先を含めなければなりません。 [OSPS-VM-02.01]
    プロジェクトのセキュリティ連絡先を含むsecurity.md(または同様の名前の)ファイルを作成してください。


このデータは、Community Data License Agreement – Permissive, Version 2.0 (CDLA-Permissive-2.0)のもとで利用可能です。これは、データ受領者が、データ受領者がこの契約のテキストを共有データとともに利用可能にする限り、変更の有無にかかわらずデータを共有できることを意味します。@venelouisおよびOpenSSFベストプラクティスバッジのコントリビューターにクレジットを表示してください。

プロジェクト バッジ登録の所有者: @venelouis.
エントリの作成日時 2026-06-24 15:16:13 UTC、 最終更新日 2026-06-24 15:29:00 UTC 最後に2026-06-24 15:29:00 UTCにバッジ合格を達成しました。