Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
languagejs
[
  {
    "organization_info": {
      "description": "An example description of the service provider organization",
      "display_name": "Example Service Provider",
      "logotype": "https://example.com/logo.svg",
      "name": "Example Service Provider AB",
      "url": "https://example.com"
    },
    "sso_links": [
      {
        "description": "Example Digital Math Service is the number one digital math companion in Schengen",
        "disabled": false,
        "display_name": "Math Rocket",
        "entity_id": "https://example.com/math",
        "idp_parameter": "entityID",
        "logo": "https://example.com/math/logo.svg",
        "sp_init": "https://example.com/math/Shibboleth.sso/Login?",
        "sso_type": "entity_id",
        "target_parameter": "Target",
        "target_value": "https://example.com/math/resource"
      },
      {
        "description": "Example Digital Brazilian Jiu-Jitsu Service is the number one digital BJJ teacher in Schengen",
        "disabled": false,
        "display_name": "Example Digital Brazilian Jiu-Jitsu Service",
        "entity_id": "https://example.com/bjj",
        "link_mapping": {
          "https://idp.example1.com": "https://example.com/bjj/login?idp=example1-idp",
          "https://idp.example2.com": "https://example.com/bjj/login?idp=example2-idp",
          "https://idp.example3.com": "https://example.com/bjj/login?idp=example3-idp"
        },
        "logo": "https://example.com/bjj/logo.png",
        "sso_type": "link_map"
      }
    ]
  }
]

JSON schema

JSON schema for validating SP SSO links metadata:The SSO links metadata MUST validate against the JSON schema found at https://fed.skolfederation.se/pilot/schemas/sso-links-metadata-schema-0_1.json.

Code Block
languagejs
{
  "$schema": "httphttps://json-schema.org/draft/2020-0712/schema#schema",
  "type$id": "arrayhttps://fed.skolfederation.se/pilot/schemas/sso-links-metadata-schema-0_1.json",
  "title": "Skolfederation SSO Links Metadata",
  "type": "array",
  "minItems": 1,
  "items": {
    "type": "object",
    "properties": {
      "organization_info": {
        "type": "object",
        "properties": {
          "description": {
            "type": "string" },
            "display_nameminLength": { "type": "string"1
          },
          "logotypedisplay_name": {
            "type": "string", "format": "uri" },

            "nameminLength": { "type": "string" 1
          },
          "urllogotype": {
            "type": "string",
            "format": "uri" },
        },
        "required"pattern": ["description", "display_name", "logotype", "name", "url"],
^https://"
          "additionalProperties": false
 },
     },
      "sso_linksname": {
            "type": "arraystring",
            "itemsminLength": {1
          "type": "object"},
          "propertiesurl": {
            "description": { "type"type": "string" },
            "disabledformat": { "type": "boolean" }"uri",
            "display_namepattern": { "type": "string" },^https://"
          }
  "entity_id": { "type": "string", "format": "uri" },
        "required": [
   "idp_parameter": { "type": "string" },
       "description",
          "display_name",
       "logo": { "type": "stringlogotype",
  "format": "uri" },
      "name",
      "sp_init": { "type": "string", "formaturl":
 "uri" },
      ],
      "sso_type": { "typeadditionalProperties": "string", "enum": ["entity_id", "link_map"] false
      },
      "sso_links": {
     "target_parameter": {   "type": "stringarray" },
            "target_valueminItems": { "$ref": "#/definitions/uriOrRelativePath" }1,
            "link_mapping""items": {
              "type": "object",
              "minPropertiesproperties": 1,{
              "patternPropertiesdescription": {
                ".*": { "type": "string", "format": "uri", "pattern": "^https://" }
              "minLength": 1
              },
              "additionalPropertiesdisabled": false,{
              "propertyNamestype": { "type": "string"boolean",
 "minLength": 1 }
           "default": }false
            },
          "required": ["description", "display_name", "entity_id", "logo", "sso_type"]: {
              "type": "string",
              "anyOfminLength": [1
            {},
              "properties"entity_id": { "sso_type": { "const
              "type": "entity_id" } }string",
              "requiredformat": ["idp_parameter", "sp_init"]"uri"
            },
            "idp_parameter": {
              "propertiestype": { "sso_type": { "const": "link_map" } },
 string",
                 "requiredminLength": ["link_mapping"]1
            },
           ],
  "logo": {
              "allOftype": ["string",
            {   "format": "uri",
              "ifpattern": { "required": ["target_parameter"] },^https://"
            },
  "then": { "required": ["target_value"] }
      "sp_init": {
     },
            {"type": "string",
              "ifformat": { "required": ["target_value"] }"uri",
              "thenpattern": { "required": ["target_parameter"] }^https://"
            },
          ],
    "sso_type": {
      "additionalProperties": false
        }"type": "string",
      }
    },
    "requiredenum": ["organization_info", "sso_links"],

      "additionalProperties": false
  },
  "definitions": {
    "uriOrRelativePath": {entity_id",
      "anyOf": [
        { "type": "string", "format": "uri"link_map"
              ]
            },
        {  "type": "string", "patterntarget_parameter": "^/(?!/)[^\\s]*$" }
{
        ]
    }
  }
}

IdP Discovery Metadata

Purpose

The IdP Discovery Metadata feed provides a structured JSON representation of Identity Providers intended for consumption by:

  • Discovery services (WAYF / inverse discovery)

  • Login portals

  • Federation UI implementations

  • IdP selection interfaces

The purpose of this feed is to enable consistent and predictable presentation of Identity Providers across user-facing services.

This feed does not replace SAML metadata.
SAML metadata remains the authoritative source for federation trust and protocol configuration.

The IdP Discovery Metadata feed may be generated from one or more authoritative sources, including but not limited to federation SAML metadata.

IdP Discovery Metadata Structure

The IdP Discovery Metadata feed MUST be a JSON array containing one object per Identity Provider.

Each IdP object MUST contain the following fields:

FieldRequiredTypeDescription
entity_idYESstring (URI)The SAML entityID of the IdP in the federation
descriptionYESstringA short description of the organization and its services
display_nameYESstringA user-friendly name for display purposes
logotypeYESstring (URI)URL to the organization's logo
nameYESstringThe official legal name of the organization
urlYESstring (URI)The official website of the organization

All properties are REQUIRED.

Additional properties MUST NOT be included.

Example IdP Metadata Feed

  "type": "string",
              "minLength": 1
            },
            "target_value": {
              "$ref": "#/$defs/uriOrRelativePath"
            },
            "link_mapping": {
              "type": "object",
              "minProperties": 1,
              "patternProperties": {
                "^.+$": {
                  "type": "string",
                  "format": "uri",
                  "pattern": "^https://"
                }
              },
              "propertyNames": {
                "type": "string",
                "minLength": 1
              },
              "additionalProperties": false
            }
          },
          "required": [
            "description",
            "display_name",
            "entity_id",
            "logo",
            "sso_type"
          ],
          "dependentRequired": {
            "target_parameter": [
              "target_value"
            ],
            "target_value": [
              "target_parameter"
            ]
          },
          "oneOf": [
            {
              "properties": {
                "sso_type": {
                  "const": "entity_id"
                }
              },
              "required": [
                "idp_parameter",
                "sp_init"
              ],
              "not": {
                "required": [
                  "link_mapping"
                ]
              }
            },
            {
              "properties": {
                "sso_type": {
                  "const": "link_map"
                }
              },
              "required": [
                "link_mapping"
              ],
              "not": {
                "anyOf": [
                  {
                    "required": [
                      "idp_parameter"
                    ]
                  },
                  {
                    "required": [
                      "sp_init"
                    ]
                  }
                ]
              }
            }
          ],
          "additionalProperties": false
        }
      }
    },
    "required": [
      "organization_info",
      "sso_links"
    ],
    "additionalProperties": false
  },
  "$defs": {
    "uriOrRelativePath": {
      "anyOf": [
        {
          "type": "string",
          "format": "uri"
        },
        {
          "type": "string",
          "pattern": "^/(?!/)[^\\s]*$"
        }
      ]
    }
  }
}

IdP Discovery Metadata

Purpose

The IdP Discovery Metadata feed provides a structured JSON representation of Identity Providers intended for consumption by:

  • Discovery services (WAYF / inverse discovery)

  • Login portals

  • Federation UI implementations

  • IdP selection interfaces

The purpose of this feed is to enable consistent and predictable presentation of Identity Providers across user-facing services.

This feed does not replace SAML metadata.
SAML metadata remains the authoritative source for federation trust and protocol configuration.

The IdP Discovery Metadata feed may be generated from one or more authoritative sources, including but not limited to federation SAML metadata.


...

IdP Discovery Metadata Structure

The IdP Discovery Metadata feed MUST be a JSON array containing one object per Identity Provider.

Each IdP object MUST contain the following fields:

FieldRequiredTypeDescription
entity_idYESstring (URI)The SAML entityID of the IdP in the federation
descriptionYESstringA short description of the organization and its services
display_nameYESstringA user-friendly name for display purposes
logotypeYESstring (URI)URL to the organization's logo
nameYESstringThe official legal name of the organization
urlYESstring (URI)The official website of the organization

All properties are REQUIRED.

Additional properties MUST NOT be included.

...

Example metadata

Code Block
languagejs
[
  {
    "entity_id": "https://idp1.example.com/idp",
    "description": "Example Organization One Identity Provider for staff and student login.",
    "display_name": "Example Organization One",
    "logotype": "https://idp1.example.com/static/logo.svg",
    "name": "Example Organization One AB",
    "url": "https://www.example.com"
  },
  {
    "entity_id": "https://idp2.example.com/idp",
    "description": "Example Organization Two Identity Provider used for federated authentication.",
    "display_name": "Example Organization Two",
    "logotype": "https://idp2.example.com/static/logo.svg",
    "name": "Example Organization Two AB",
    "url": "https://org2.example.com"
  },
  {
    
Code Block
languagejs
[
	{
		"entity_id": "https://idpidp3.example.secom/idp",
		    "description": "Example MunicipalityOrganization Three Identity Provider forsupporting staff and student loginaccess.",
		    "display_name": "Example Organization MunicipalityThree",
		    "logotype": "https://idpidp3.example.secom/static/logo.svg",
		    "name": "Example Organization MunicipalityThree AB",
		    "url": "https://wwworg3.example.secom"
	  }
]

...


...

JSON schema

The IdP Discovery feed MUST validate against the following JSON Schema (Draft-07):JSON schema found at https://fed.skolfederation.se/pilot/schemas/idp-discovery-feed-schema-0_1.json

Code Block
{
	  "$schema": "httphttps://json-schema.org/draft-07/schema#",
	/2020-12/schema",
  "$id": "https://fed.skolfederation.se/pilot/schemas/idp-discovery-feed-schema-0_1.json",
  "title": "Skolfederation IdP Discovery metadata feed",
	  "type": "array",
	  "minItems": 1,
  "items": {
		    "type": "object",
		    "properties": {
			      "entity_id": {
				        "type": "string",
				        "format": "uri"
			      },
			      "description": {
				        "type": "string",
				        "minLength": 1
			      },
			      "display_name": {
				        "type": "string",
				        "minLength": 1
			      },
			"logotype": {
				      "logotype": {
        "type": "string",
				        "format": "uri"
			},
			,
        "pattern": "^https://"
      },
      "name": {
				        "type": "string",
				        "minLength": 1
			      },
			      "url": {
				        "type": "string",
				        "format": "uri"
			}
		},
		,
        "pattern": "^https://"
      }
    },
    "required": [
			      "entity_id",
			      "description",
			      "display_name",
			      "logotype",
			      "name",
			      "url"
		    ],
		    "additionalProperties": false
	  }
}


...

Validation and Encoding Requirements

...