You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WebAuthn Level 3 introduces Related Origins (§ 5.11), allowing credentials to be used across unrelated domains. The RP hosts a JSON document at https://{rpId}/.well-known/webauthn listing allowed origins.
Proposed Implementation
New module: ops/webauthn/related_origins.rs
RelatedOriginsDocument struct for parsing the well-known JSON
RelatedOriginsHttpClient trait for fetching (pluggable, testable)
validate_related_origins() implementing the validation procedure from § 5.11.1
related-origins: Core validation logic with trait-based HTTP client
related-origins-client: Optional embedded HTTP client for testing/convenience
Future Consideration
The existing WebSocket/Noise implementation for caBLE could be refactored to follow the same pattern (trait + optional default implementation behind a feature flag) for consistency.
Summary
WebAuthn Level 3 introduces Related Origins (§ 5.11), allowing credentials to be used across unrelated domains. The RP hosts a JSON document at
https://{rpId}/.well-known/webauthnlisting allowed origins.Proposed Implementation
New module:
ops/webauthn/related_origins.rsRelatedOriginsDocumentstruct for parsing the well-known JSONRelatedOriginsHttpClienttrait for fetching (pluggable, testable)validate_related_origins()implementing the validation procedure from § 5.11.1Enhance
RelyingPartyId(addresses Relying Party ID (RPID) validation #137)validate_for_origin()to check if RP ID is a registrable suffixDependencies
urlfor origin parsingpublicsuffixfor registrable domain detectionFeature Flags
related-origins: Core validation logic with trait-based HTTP clientrelated-origins-client: Optional embedded HTTP client for testing/convenienceFuture Consideration
The existing WebSocket/Noise implementation for caBLE could be refactored to follow the same pattern (trait + optional default implementation behind a feature flag) for consistency.