Aller au contenu

Documents

phil/well-known-bundle

En-têtes

Chaque réponse porte X-Robots-Tag: noindex : les documents sont destinés aux logiciels, pas aux résultats de recherche. Une réponse réussie dont le document ne fixe ni max-age ni no-store propre est public avec un max-age de cache_max_age, et porte une empreinte de son corps comme ETag ; une requête qui la détient reçoit un 304. Les erreurs et les redirections gardent le private, no-cache de Symfony. Les routes sont sans état et aucun document ne pose de témoin.

DocumentType de médiaCORS
security.txttext/plain; charset=utf-8non
change-passwordun 302non
webfingerapplication/jrd+json*, erreurs comprises
nodeinfoapplication/json*
NodeInfo 2.1application/json; profile="http://nodeinfo.diaspora.software/ns/schema/2.1#"*
did.jsonapplication/did+ld+json avec un @context, sinon application/did+json*
did-configuration.jsonapplication/json*
atproto-didtext/plain; charset=utf-8*
apple-app-site-associationapplication/jsonnon
assetlinks.jsonapplication/jsonnon
documentscontent_typecors

security.txt

RFC 9116. Les champs dans l'ordre de la RFC, un par ligne, Contact en premier, Expires en UTC, Preferred-Languages sur une seule ligne :

Contact: mailto:security@example.com
Expires: 2027-06-30T00:00:00Z
Preferred-Languages: fr, en
Canonical: https://example.com/.well-known/security.txt

Le texte est écrit à la construction du conteneur. La RFC 9116 recommande une signature OpenPGP en clair : le bundle ne détient aucune clé, et l'application signe le texte avec le SecurityTxtSigner qu'elle nomme dans security_txt.signer.

L'expiration comme vérification de santé

Quand phil/monitoring-bundle est installé, le bundle enregistre SecurityTxtExpiryCheck, la vérification security_txt de la santé du site, étiquetée phil_monitoring.health_check. Elle lit le champ Expires du fichier sur le service clock :

Temps restantÉtatRésumé
Plus de security_txt.expiry_warning_days joursen serviceExpires on 2027-06-30T00:00:00+00:00.
Ce nombre de jours ou moinsdégradéThe security.txt expires on 2027-06-30T00:00:00+00:00, in 12 days.
Aucunhors serviceThe security.txt expired on 2027-06-30T00:00:00+00:00.

Les jours restants sont arrondis vers le haut. Un conteneur qui tourne encore après la date échoue donc à la vérification, et la disponibilité du site avec elle, au lieu de servir un fichier expiré. Sans phil/monitoring-bundle, aucune vérification n'est enregistrée.

change-password

L'URL bien connue du W3C pour changer de mot de passe : un 302 vers la route ou l'URL de la configuration, pour que les gestionnaires de mots de passe envoient leurs utilisateurs à la bonne page.

WebFinger

RFC 7033 : voir WebFinger.

NodeInfo

/.well-known/nodeinfo renvoie au document 2.1 par son URL absolue, générée par le routeur :

{"links":[{"rel":"http://nodeinfo.diaspora.software/ns/schema/2.1","href":"https://example.com/nodeinfo/2.1"}]}

Le document 2.1 contient la version, le logiciel, les protocoles, les services, openRegistrations, l'utilisation (les nombres que dit le fournisseur, aucun par défaut) et les métadonnées. Le fournisseur est interrogé à chaque requête.

did.json et did-configuration.json

did.json est le document DID de l'identifiant did:web du site, tel que donné. did-configuration.json suit la DIF Well Known DID Configuration : son @context et ses linked_dids, les attestations de lien de domaine de la configuration dans leur ordre, puis celles des fichiers. Le bundle sert les deux tels que donnés et ne vérifie aucune signature.

atproto-did

L'AT Protocol prouve un identifiant par son domaine : le DID, en texte brut, sans saut de ligne. La configuration nomme le DID propre au site et le DID d'autres hôtes ; l'hôte de la requête, en minuscules, le choisit, sinon c'est celui du site ; un hôte sans l'un ni l'autre donne un 404.

Servis à leur adresse exacte, sans redirection et en application/json, comme l'exigent iOS et Android. Les déclarations Android sont celles de android_apps (relation et une cible android_app), puis statements tel que donné.

Documents fixes

Chaque entrée de documents est servie à son chemin avec son type de média, à partir d'une chaîne ou d'un fichier lu à la construction du conteneur.