Version: 1.0
Date: September 2025
Authors: [To be filled]
This specification defines how OpenID Federation Entity Configuration discovery can be enhanced through the use of Decentralized Identifiers (DIDs). It extends the OpenID Federation specification to allow DID documents to serve as alternative discovery mechanisms for OpenID Federation Entity Identifiers, enabling decentralized discovery of federation participants while maintaining compatibility with existing OpenID Federation trust mechanisms.
OpenID Federation provides a mechanism for establishing trust between OpenID Connect parties through a hierarchical trust model using Entity Statements and Trust Anchors. Decentralized Identifiers (DIDs) offer a decentralized approach to identifier resolution and verification.
This specification defines how DID documents can reference OpenID Federation Entity Identifiers, enabling DID-based discovery of federation entities while preserving the OpenID Federation trust evaluation mechanisms.
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.
This specification focuses on Entity Configuration discovery through DID documents. It does not:
DID Subject: The entity identified by the DID, as defined in the DID specification.
OpenID Federation Entity: An entity participating in an OpenID Federation, identified by an Entity Identifier.
Entity Configuration: A JWT containing metadata about an OpenID Federation entity, as defined in the OpenID Federation specification.
Service Map: An entry in the service property of a DID document that describes how to interact with a service associated with the DID subject.
This specification defines a new service type OpenIDFederation for inclusion in DID documents.
A service entry of type OpenIDFederation MUST include the following properties:
id: A URI that uniquely identifies the service within the DID documenttype: MUST be set to "OpenIDFederation"serviceEndpoint: The OpenID Federation Entity Identifier URIrole: OPTIONAL. Specifies the role of the referenced entity(Normative)
The role property, when present, MUST contain one of the following values:
"subject": Indicates the Entity Identifier belongs to the DID subject itself"trust_anchor": Indicates the Entity Identifier belongs to a Trust AnchorIf the role property is omitted, implementations SHOULD treat the service as referring to the DID subject.
(Informative)
{
"@context": [
"https://www.w3.org/ns/did/v1"
],
"id": "did:example:123456789abcdefghi",
"service": [
{
"id": "did:example:123456789abcdefghi#openid-federation-subject",
"type": "OpenIDFederation",
"serviceEndpoint": "https://issuer.example.com",
"role": "subject"
},
{
"id": "did:example:123456789abcdefghi#openid-federation-ta",
"type": "OpenIDFederation",
"serviceEndpoint": "https://ta.federation.example.org",
"role": "trust_anchor"
}
]
}(Normative)
When an OpenID Federation participant receives a DID as an identifier for an entity, it MAY use the following process to discover the entity's OpenID Federation Entity Configuration:
type set to "OpenIDFederation"role set to "subject" (or no role specified), use the serviceEndpoint as the Entity Identifier(Informative)
┌─────────────┐ 1. DID Resolution ┌──────────────┐
│ Client │ ────────────────────────▶│ DID Registry │
│ │ │ (varies) │
└─────────────┘ └──────────────┘
│ │
│ 2. DID Document │
│ ◀──────────────────────────────────────┘
│
│ 3. Extract OpenIDFederation services
│ 4. Identify Entity Identifier(s)
│
│ 5. GET /.well-known/openid_federation
└────────────────────────────────────────┐
│
┌───────────────────────────────────────────────▼──┐
│ OpenID Federation Entity │
│ │
│ /.well-known/openid_federation │
│ └─▶ Entity Configuration (JWT) │
└───────────────────────────────────────────────────┘(Informative)
After extracting the Entity Identifier from the DID document service entry:
Request:
GET /.well-known/openid_federation HTTP/1.1
Host: issuer.example.com
Accept: application/entity-statement+jwtResponse:
HTTP/1.1 200 OK
Content-Type: application/entity-statement+jwt
Cache-Control: max-age=3600
eyJhbGciOiJSUzI1NiIsImtpZCI6IjEifQ.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFt...(Normative)
DID documents MAY include service entries with role set to "trust_anchor" to provide hints about relevant Trust Anchors for the DID subject's federation participation.
(Normative)
When processing Trust Anchor references from DID documents:
(Informative)
A DID document may reference multiple Trust Anchors to indicate the DID subject's participation in multiple federations:
{
"id": "did:example:123456789abcdefghi",
"service": [
{
"id": "did:example:123456789abcdefghi#federation-subject",
"type": "OpenIDFederation",
"serviceEndpoint": "https://issuer.example.com",
"role": "subject"
},
{
"id": "did:example:123456789abcdefghi#ta-health",
"type": "OpenIDFederation",
"serviceEndpoint": "https://health.ta.example.org",
"role": "trust_anchor"
},
{
"id": "did:example:123456789abcdefghi#ta-education",
"type": "OpenIDFederation",
"serviceEndpoint": "https://education.ta.example.org",
"role": "trust_anchor"
}
]
}(Normative)
Implementations SHOULD provide fallback mechanisms when DID resolution fails or when DID documents do not contain OpenIDFederation service entries.
(Informative)
Implementations MAY cache resolved DID documents according to the caching policies of the DID method used. Care should be taken to respect both DID method-specific caching rules and OpenID Federation Entity Configuration caching requirements.
(Normative)
When DID resolution fails or returns invalid documents, implementations MUST handle errors gracefully and MAY attempt alternative discovery methods.
(Informative)
This specification relies on the security properties of the underlying DID method for ensuring DID document integrity. Implementations should be aware that compromised DID documents could redirect Entity Configuration discovery to malicious endpoints.
(Informative)
The use of DIDs for Entity Configuration discovery introduces potential attack vectors where malicious actors might:
Implementations should validate that the DID subject has legitimate authority to reference the claimed Entity Identifiers.
(Informative)
Since this specification primarily targets organizational entities (issuers and verifiers) rather than natural persons, privacy implications are generally limited. However, implementations should consider:
(Normative)
The security of the overall system depends on both the DID method's security properties and the OpenID Federation trust mechanisms. Implementations MUST NOT consider an entity trusted solely because it is referenced in a DID document. The complete OpenID Federation trust evaluation process MUST be performed.
This specification requests registration of the service type OpenIDFederation for use in DID documents.
Service Type: OpenIDFederation
Description: OpenID Federation Entity Identifier reference
Specification: This document
(Informative)
This appendix provides a complete example of discovering an OpenID Federation Entity Configuration through a DID.
A Relying Party wants to discover the Entity Configuration for an issuer identified by the DID did:web:issuer.example.com.
GET /.well-known/did.json HTTP/1.1
Host: issuer.example.com {
"@context": ["https://www.w3.org/ns/did/v1"],
"id": "did:web:issuer.example.com",
"service": [
{
"id": "did:web:issuer.example.com#openid-federation",
"type": "OpenIDFederation",
"serviceEndpoint": "https://issuer.example.com",
"role": "subject"
},
{
"id": "did:web:issuer.example.com#trust-anchor",
"type": "OpenIDFederation",
"serviceEndpoint": "https://federation.trust.example.org",
"role": "trust_anchor"
}
]
} GET /.well-known/openid_federation HTTP/1.1
Host: issuer.example.com
Accept: application/entity-statement+jwt HTTP/1.1 200 OK
Content-Type: application/entity-statement+jwt
eyJhbGciOiJSUzI1NiIsImtpZCI6InNpZ25pbmctMSJ9.eyJpc3MiOiJodHRwczovL2lzc3Vlci5leGFtcGxlLmNvbSIsInN1YiI6Imh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJSU0EiLCJ1c2UiOiJzaWciLCJraWQiOiJzaWduaW5nLTEiLCJuIjoiLi4uIiwiZSI6IkFRQUIifV19LCJhdXRob3JpdHlfaGludHMiOlsiaHR0cHM6Ly9mZWRlcmF0aW9uLnRydXN0LmV4YW1wbGUub3JnIl0sIm1ldGFkYXRhIjp7Im9wZW5pZF9jcmVkZW50aWFsX2lzc3VlciI6eyJjcmVkZW50aWFsX2lzc3VlciI6Imh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tIiwiY3JlZGVudGlhbF9lbmRwb2ludCI6Imh0dHBzOi8vaXNzdWVyLmV4YW1wbGUuY29tL2NyZWRlbnRpYWwiLCJjcmVkZW50aWFsc19zdXBwb3J0ZWQiOlt7ImZvcm1hdCI6InZjK3NkLWp3dCIsImNyZWRlbnRpYWxfZGVmaW5pdGlvbiI6eyJ0eXBlIjpbIlZlcmlmaWFibGVDcmVkZW50aWFsIiwiSURDcmVkZW50aWFsIl19fV19fSwiaWF0IjoxNjk0MDk2NDAwLCJleHAiOjE2OTQxODI4MDB9.signature