{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "API attestation for Party authentication v3", "type": "object", "additionalProperties": false, "required": [ "iss", "aud", "jti", "login_attempt_id", "oidc_issuer", "oidc_subject", "auth_time", "iat", "exp", "voperson_id" ], "properties": { "iss": { "const": "api" }, "aud": { "const": "party_governance.authentication.v3" }, "jti": { "$ref": "#/$defs/UUID" }, "login_attempt_id": { "$ref": "#/$defs/UUID" }, "oidc_issuer": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "oidc_subject": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "auth_time": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "iat": { "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "exp": { "type": "integer", "minimum": 1, "maximum": 9007199254740991 }, "name": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "email": { "type": "string", "format": "email", "maxLength": 320, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "email_verified": { "const": true }, "preferred_username": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "given_name": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "family_name": { "type": "string", "minLength": 1, "maxLength": 1024, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "schac_home_organization": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "voperson_external_affiliation": { "type": "array", "maxItems": 128, "items": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" } }, "entitlements": { "type": "array", "maxItems": 128, "items": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" } }, "voperson_id": { "type": "string", "minLength": 1, "maxLength": 2048, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" }, "site_username": { "type": "string", "minLength": 1, "maxLength": 256, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" } }, "dependentRequired": { "email": [ "email_verified" ], "email_verified": [ "email" ] }, "$defs": { "UUID": { "type": "string", "format": "uuid", "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$" }, "ProtectedHeader": { "type": "object", "additionalProperties": false, "required": [ "alg", "typ", "kid" ], "properties": { "alg": { "const": "EdDSA" }, "typ": { "const": "pharos-party-authentication-v3+jwt" }, "kid": { "type": "string", "minLength": 1, "maxLength": 128, "pattern": "^[^\\u0000-\\u001f\\u007f-\\u009f]+$" } } } } }