{"id":31968490,"url":"https://github.com/impierce/openid-federation","last_synced_at":"2026-07-29T11:31:21.093Z","repository":{"id":317697304,"uuid":"1068488485","full_name":"impierce/openid-federation","owner":"impierce","description":"A Rust implementation of the OpenID Federation 1.0 standard.","archived":false,"fork":false,"pushed_at":"2025-10-02T14:28:59.000Z","size":2,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-10-02T14:39:35.603Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/impierce.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-02T13:12:42.000Z","updated_at":"2025-10-02T14:03:35.000Z","dependencies_parsed_at":"2025-10-02T14:39:39.501Z","dependency_job_id":null,"html_url":"https://github.com/impierce/openid-federation","commit_stats":null,"previous_names":["impierce/openid-federation"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/impierce/openid-federation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/impierce%2Fopenid-federation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/impierce%2Fopenid-federation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/impierce%2Fopenid-federation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/impierce%2Fopenid-federation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/impierce","download_url":"https://codeload.github.com/impierce/openid-federation/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/impierce%2Fopenid-federation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279020334,"owners_count":26086868,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-14T18:54:00.262Z","updated_at":"2026-07-29T11:31:21.086Z","avatar_url":"https://github.com/impierce.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenID Federation\n\nA Rust implementation of the OpenID Federation 1.0 standard.\n\nThis library provides comprehensive support for OpenID Federation, enabling the creation of trust relationships between OpenID Connect providers and relying parties through a federation of trust anchors.\n\n## Features\n\n- **Subordinate Statements and Entity Configurations**: Create and validate federation subordinate statements and entity configurations\n- **Trust Chain Management**: Build and validate trust chains for federation entities\n- **JWT Processing**: Sign and verify JWTs with federation-specific extensions\n- **Metadata Handling**: Support for all entity types (Federation Entity, OpenID Provider, Relying Party, etc.)\n- **Policy Operators**: Implementation of federation metadata policy operators\n- **HTTP Client**: Built-in client for fetching entity configurations and statements\n- **Comprehensive Validation**: Full validation of subordinate statements, entity configurations, trust chains, and metadata\n\n## Quick Start\n\nAdd this to your `Cargo.toml`:\n\n```toml\n[dependencies]\nopenid-federation = \"0.1.0\"\n```\n\n### Basic Usage\n\n```rust\nuse openid_federation::{\n    EntityConfiguration, SubordinateStatement, JwkSet, FederationEntityMetadata,\n    EntityMetadata, TrustChain\n};\nuse chrono::{Duration, Utc};\nuse url::Url;\n\n// Create an entity configuration\nlet entity_id = Url::parse(\"https://example.com\")?;\nlet jwks = JwkSet::new();\nlet exp = Utc::now() + Duration::hours(24);\nlet iat = Utc::now();\n\nlet mut config = EntityConfiguration::new(entity_id, jwks, exp, iat);\n\n// Add metadata\nlet mut metadata = EntityMetadata::new();\nmetadata.federation_entity = Some(FederationEntityMetadata {\n    organization_name: Some(\"Example Organization\".to_string()),\n    homepage_uri: Some(Url::parse(\"https://example.com\")?),\n    ..Default::default()\n});\n\nconfig = config.with_metadata(metadata);\n\n// Create and validate trust chains\nlet trust_chain = TrustChain::try_new(vec![\n    \"entity_config_jwt\".to_string(),\n    \"intermediate_statement_jwt\".to_string(), \n    \"trust_anchor_config_jwt\".to_string(),\n]);\n\n```\n\n### HTTP Client Usage\n\n```rust\nuse openid_federation::{FederationClient, UrlValidator};\nuse url::Url;\n\n#[tokio::main]\nasync fn main() -\u003e Result\u003c(), Box\u003cdyn std::error::Error\u003e\u003e {\n    let client = FederationClient::new();\n    let entity_id = Url::parse(\"https://example.com\")?;\n    \n    // Validate entity ID\n    UrlValidator::validate_entity_id(\u0026entity_id)?;\n    \n    // Fetch entity configuration\n    let config_jwt = client.fetch_entity_configuration(\u0026entity_id).await?;\n    println!(\"Fetched entity configuration: {}\", config_jwt);\n    \n    Ok(())\n}\n```\n\n## Standards Compliance\n\nThis implementation follows the OpenID Federation 1.0 specification (draft 43) and includes:\n\n- Subordinate Statement format and validation\n- Entity Configuration format and validation  \n- Trust Chain construction and validation\n- Federation metadata policy operators\n- Well-known endpoint discovery\n- Federation-specific JWT claims and headers\n- Comprehensive error handling\n\n## Entity Types Supported\n\n- **Federation Entity**: Core federation infrastructure\n- **OpenID Connect Provider**: Identity providers in the federation\n- **OpenID Connect Relying Party**: Clients in the federation\n- **OAuth Authorization Server**: OAuth 2.0 authorization servers\n- **OAuth Protected Resource**: Resource servers\n- **OAuth Client**: OAuth 2.0 clients\n\n## Architecture\n\nThe library is organized into several key modules:\n\n- `entity`: Subordinate Statement and Entity Configuration structures\n- `trust_chain`: Trust chain validation and processing\n- `metadata`: All metadata types for different entity kinds\n- `jwk`: JSON Web Key and JWK Set utilities\n- `jwt`: JWT processing with federation extensions\n- `types`: Common types and enums\n- `utils`: Utility functions for HTTP, validation, and time handling\n- `error`: Comprehensive error types\n\n## License\n\nLicensed under the Apache License, Version 2.0.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpierce%2Fopenid-federation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimpierce%2Fopenid-federation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimpierce%2Fopenid-federation/lists"}