rullst-connect

Проекты, которые следуют приведенным ниже лучшим практикам, могут добровольно и самостоятельно оценить себя и продемонстрировать, что они получили значок Open Source Security Foundation (OpenSSF).

Не существует набора практик, гарантирующего, что у программного обеспечения никогда не будет недостатков или уязвимостей; даже формальные методы могут не помочь, если спецификации или допущения ошибочны. Также не существует какой-либо практики, которая могла бы гарантировать, что проект будет поддерживать здоровое и хорошо функционирующее сообщество разработчиков. Однако следующие хорошие правила могут помочь улучшить результаты проектов. Например, некоторые правила описывают ревью несколькими участниками перед выпуском, что может помочь найти технические уязвимости, которые было бы сложно найти другим способом, и помочь построить доверие и желание дальнейшего взаимодействия между разработчиками из разных компаний. Чтобы получить значок, нужно выполнить все критерии с ключевыми словами "НЕОБХОДИМО"/"ОБЯЗАН"/"НЕДОПУСТИМО", все критерии со словом "СЛЕДУЕТ" либо должны удовлетворяться, либо должно быть приведено обоснование их невыполнения, и все критерии со словом "ЖЕЛАТЕЛЬНО" могут быть удовлетворены ИЛИ неудовлетворены (желательно, чтобы они были хотя бы рассмотрены). Если вы хотите ввести общий комментарий вместо объяснения, почему текущая ситуация приемлема, начните текст с '//' и пробела. Приветствуется обратная связь через сайт на GitHub в виде issues или pull requests. Существует также список рассылки для общих вопросов.

Мы с удовольствием предоставляем информацию на нескольких языках, однако, если есть какой-либо конфликт или несоответствие между переводами, английская версия является авторитетной.
Если это ваш проект, пожалуйста, отобразите статус вашего базового значка на странице проекта! Статус базового значка выглядит так: Базовый уровень значка для проекта 13360 - in_progress Вот как встроить базовый значок:
Вы можете показать статус базового значка, вставив это в ваш файл markdown:
[![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)».
    Если используется более одного языка, перечислите их через запятую (пробелы необязательны), и отсортируйте их от наиболее до наименее используемого. Если список длинный, пожалуйста, перечислите по крайней мере три наиболее распространенных. Если языка нет (например, это проект только для документации или только для тестирования), используйте один символ «-» (минус). Для каждого языка используйте общепринятую капитализацию названия, например «JavaScript».
    Common Platform Enumeration (CPE) - это структурированная схема именования для информационных систем, программного обеспечения и пакетов. Она используется в ряде систем и баз данных для отчетов об уязвимостях.

    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]
    Обеспечьте многофакторную аутентификацию для системы контроля версий проекта, требуя от соавторов предоставления второй формы аутентификации при доступе к конфиденциальным данным или изменении настроек репозитория. Для этой меры приемлемы passkeys (ключи доступа).


    При добавлении нового соавтора система контроля версий ДОЛЖНА требовать ручного назначения прав доступа или по умолчанию ограничивать права доступа соавтора до минимально доступных привилегий. [OSPS-AC-02.01]
    Большинство публичных систем контроля версий настроены таким образом. Убедитесь, что система контроля версий проекта всегда назначает минимально доступные права доступа соавторам по умолчанию при добавлении, предоставляя дополнительные права доступа только при необходимости.


    При попытке прямого коммита в основную ветку проекта механизм принудительного исполнения ДОЛЖЕН предотвращать применение изменения. [OSPS-AC-03.01]
    Если VCS централизована, установите защиту ветки на основную ветку в VCS проекта. В качестве альтернативы используйте децентрализованный подход, как в ядре 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]
    Настройте конвейер выпуска проекта так, чтобы он получал данные только с веб-сайтов, API-ответов и других служб, которые используют зашифрованные каналы, такие как SSH или HTTPS для передачи данных.


    Проект ОБЯЗАН предотвращать непреднамеренное сохранение незашифрованных конфиденциальных данных, таких как секреты и учетные данные, в системе контроля версий. [OSPS-BR-07.01]
    Настройте .gitignore или эквивалент для исключения файлов, которые могут содержать конфиденциальную информацию. Используйте pre-commit хуки и автоматизированные инструменты сканирования для обнаружения и предотвращения включения конфиденциальных данных в коммиты.


    Когда проект сделал релиз, документация проекта ОБЯЗАНА включать руководства пользователя для всего базового функционала. [OSPS-DO-01.01]
    Создайте руководства пользователя или документацию для всего базового функционала проекта, объясняющие, как устанавливать, настраивать и использовать возможности проекта. Если есть какие-либо известные опасные или деструктивные действия, включите хорошо заметные предупреждения.


    Когда проект сделал релиз, документация проекта ОБЯЗАНА включать руководство по сообщению о дефектах. [OSPS-DO-02.01]
    Рекомендуется, чтобы проекты использовали трекер задач по умолчанию в их системе контроля версий. Если используется внешний источник, убедитесь, что документация проекта и руководство по внесению вклада четко и заметно объясняют, как использовать систему сообщения об ошибках. Рекомендуется, чтобы документация проекта также устанавливала ожидания относительно того, как дефекты будут сортироваться и решаться.


    Пока проект активен, он ОБЯЗАН иметь один или несколько механизмов для публичных обсуждений предлагаемых изменений и препятствий в использовании. [OSPS-GV-02.01]
    Создайте один или несколько механизмов для публичных обсуждений в рамках проекта, таких как списки рассылки, мгновенные сообщения или трекеры задач, чтобы облегчить открытое общение и обратную связь.


    Пока проект активен, документация проекта ОБЯЗАНА включать объяснение процесса внесения вклада. [OSPS-GV-03.01]
    Создайте файл CONTRIBUTING.md или директорию CONTRIBUTING/ для описания процесса внесения вклада, включая шаги для отправки изменений и взаимодействия с сопровождающими проекта.


    Пока проект активен, лицензия на исходный код ОБЯЗАНА соответствовать определению Open Source от OSI или определению свободного программного обеспечения от FSF. [OSPS-LE-02.01]
    Добавьте файл LICENSE в репозиторий проекта с лицензией, которая является одобренной лицензией Open Source Initiative (OSI), или свободной лицензией, одобренной Фондом свободного программного обеспечения (FSF). Примеры таких лицензий включают 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]
    Если с выпущенными программными активами включена другая лицензия, убедитесь, что это одобренная лицензия Open Source Initiative (OSI) или свободная лицензия, одобренная Free Software Foundation (FSF). Примеры таких лицензий включают 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]
    Используйте общую систему контроля версий (VCS), такую как GitHub, GitLab или Bitbucket. Убедитесь, что репозиторий доступен для публичного чтения. Избегайте дублирования или зеркалирования репозиториев, если только хорошо видимая документация не разъясняет первичный источник. Избегайте частых изменений репозитория, которые могут повлиять на URL репозитория. Убедитесь, что репозиторий публичный.


    Система контроля версий ОБЯЗАНА содержать общедоступную запись всех внесенных изменений, кто внес изменения и когда были внесены изменения. [OSPS-QA-01.02]
    Используйте общую VCS, такую как GitHub, GitLab или Bitbucket, для поддержания публично доступной истории коммитов. Избегайте сжатия или перезаписи коммитов таким образом, чтобы это скрывало автора любых коммитов.


    Когда система управления пакетами это поддерживает, репозиторий исходного кода ОБЯЗАН содержать список зависимостей, учитывающий прямые языковые зависимости. [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 Best Practices badge.

Владелец анкеты на значок проекта: @venelouis.
2026-06-24 15:16:13 UTC, последнее изменение сделано 2026-06-24 15:29:00 UTC. Последний раз условия для получения значка были выполнены 2026-06-24 15:29:00 UTC.