2 * Copyright 2001-2006 Internet2
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 * @file saml/saml2/core/Protocols.h
20 * XMLObjects representing the SAML 2.0 Protocols schema
23 #ifndef __saml2_protocols_h__
24 #define __saml2_protocols_h__
26 #include <saml/saml2/core/Assertions.h>
29 #define DECL_SAML2POBJECTBUILDER(cname) \
30 DECL_XMLOBJECTBUILDER(SAML_API,cname,opensaml::SAMLConstants::SAML20P_NS,opensaml::SAMLConstants::SAML20P_PREFIX)
35 * @namespace opensaml::saml2p
36 * SAML 2.0 protocol namespace
40 //TODO sync C++ and Java class/interface names, e.g. -Type or no -Type, etc
42 DECL_XMLOBJECT_SIMPLE(SAML_API,Artifact,Artifact,SAML 2.0 Artifact element);
43 DECL_XMLOBJECT_SIMPLE(SAML_API,GetComplete,GetComplete,SAML 2.0 GetComplete element);
44 DECL_XMLOBJECT_SIMPLE(SAML_API,NewID,NewID,SAML 2.0 NewID element);
45 DECL_XMLOBJECT_SIMPLE(SAML_API,RequesterID,RequesterID,SAML 2.0 RequesterID element);
46 DECL_XMLOBJECT_SIMPLE(SAML_API,SessionIndex,SessionIndex,SAML 2.0 SessionIndex element);
47 DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 2.0 StatusMessage element);
49 BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementProxy,SAML 2.0 protocol Extensions element);
50 /** ExtensionsType local name */
51 static const XMLCh TYPE_NAME[];
54 BEGIN_XMLOBJECT(SAML_API,Request,SignableObject,SAML 2.0 Request element);
55 DECL_STRING_ATTRIB(ID,ID);
56 DECL_STRING_ATTRIB(Version,VER);
57 DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
58 DECL_STRING_ATTRIB(Destination,DESTINATION);
59 DECL_STRING_ATTRIB(Consent,CONSENT);
60 DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
61 DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
62 DECL_TYPED_CHILD(Extensions);
63 /** RequestAbstractType local name */
64 static const XMLCh TYPE_NAME[];
67 BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 2.0 StatusCode element);
68 DECL_STRING_ATTRIB(Value,VALUE);
69 DECL_TYPED_CHILD(StatusCode);
70 /** StatusCodeType local name */
71 static const XMLCh TYPE_NAME[];
74 BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::XMLObject,SAML 2.0 StatusDetail element);
75 DECL_XMLOBJECT_CHILDREN(Detail);
76 /** StatusDetailType local name */
77 static const XMLCh TYPE_NAME[];
80 BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 2.0 Status element);
81 DECL_TYPED_CHILD(StatusCode);
82 DECL_TYPED_CHILD(StatusMessage);
83 DECL_TYPED_CHILD(StatusDetail);
84 /** StatusType local name */
85 static const XMLCh TYPE_NAME[];
88 BEGIN_XMLOBJECT(SAML_API,StatusResponse,SignableObject,SAML 2.0 StatusResponse element);
89 DECL_STRING_ATTRIB(ID,ID);
90 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
91 DECL_STRING_ATTRIB(Version,VER);
92 DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
93 DECL_STRING_ATTRIB(Destination,DESTINATION);
94 DECL_STRING_ATTRIB(Consent,CONSENT);
96 DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
97 DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
98 DECL_TYPED_CHILD(Extensions);
99 DECL_TYPED_CHILD(Status);
101 /** StatusResponseType local name */
102 static const XMLCh TYPE_NAME[];
105 BEGIN_XMLOBJECT(SAML_API,AssertionIDRequest,Request,SAML 2.0 AssertionIDRequest element);
106 DECL_TYPED_FOREIGN_CHILDREN(AssertionIDRef,saml2);
107 /** AssertionIDRequest local name */
108 static const XMLCh TYPE_NAME[];
111 BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Request,SAML 2.0 SubjectQuery element);
112 DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
113 /** SubjectQueryType local name */
114 static const XMLCh TYPE_NAME[];
117 BEGIN_XMLOBJECT(SAML_API,RequestedAuthnContext,xmltooling::XMLObject,SAML 2.0 RequestedAuthnContext element);
118 //TODO whether, and how, to enforce the controlled vocabulary (schema enumeration) for the Comparison attrib, as in the Java ?
119 DECL_STRING_ATTRIB(Comparison,COMPARISON);
120 DECL_TYPED_FOREIGN_CHILDREN(AuthnContextClassRef,saml2);
121 DECL_TYPED_FOREIGN_CHILDREN(AuthnContextDeclRef,saml2);
122 /** exact Comparison */
123 static const XMLCh COMPARISON_EXACT[];
124 /** minimum Comparison */
125 static const XMLCh COMPARISON_MINIMUM[];
126 /** maximum Comparison */
127 static const XMLCh COMPARISON_MAXIMUM[];
128 /** better Comparison */
129 static const XMLCh COMPARISON_BETTER[];
130 /** RequestedAuthnContextType local name */
131 static const XMLCh TYPE_NAME[];
134 BEGIN_XMLOBJECT(SAML_API,AuthnQuery,SubjectQuery,SAML 2.0 AuthnQuery element);
135 DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
136 DECL_TYPED_CHILD(RequestedAuthnContext);
137 /** AuthnQueryType local name */
138 static const XMLCh TYPE_NAME[];
141 BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 2.0 AttributeQuery element);
142 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
143 /** AttributeQueryType local name */
144 static const XMLCh TYPE_NAME[];
147 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQuery,SubjectQuery,SAML 2.0 AuthzDecisionQuery element);
148 DECL_STRING_ATTRIB(Resource,RESOURCE);
149 DECL_TYPED_FOREIGN_CHILDREN(Action,saml2);
150 DECL_TYPED_FOREIGN_CHILD(Evidence,saml2);
151 /** AuthzDecisionQueryType local name */
152 static const XMLCh TYPE_NAME[];
155 BEGIN_XMLOBJECT(SAML_API,NameIDPolicy,xmltooling::XMLObject,SAML 2.0 NameIDPolicy element);
156 DECL_STRING_ATTRIB(Format,FORMAT);
157 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
158 DECL_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE);
159 /** NameIDPolicyType local name */
160 static const XMLCh TYPE_NAME[];
163 BEGIN_XMLOBJECT(SAML_API,IDPEntry,xmltooling::XMLObject,SAML2.0 IDPEntry element);
164 DECL_STRING_ATTRIB(ProviderID,PROVIDERID);
165 DECL_STRING_ATTRIB(Name,NAME);
166 DECL_STRING_ATTRIB(Loc,LOC);
167 /** IDPEntryType local name */
168 static const XMLCh TYPE_NAME[];
171 BEGIN_XMLOBJECT(SAML_API,IDPList,xmltooling::XMLObject,SAML 2.0 IDPList element);
172 DECL_TYPED_CHILDREN(IDPEntry);
173 DECL_TYPED_CHILD(GetComplete);
174 /** IDPListType local name */
175 static const XMLCh TYPE_NAME[];
178 BEGIN_XMLOBJECT(SAML_API,Scoping,xmltooling::XMLObject,SAML 2.0 Scoping element);
179 DECL_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT);
180 DECL_TYPED_CHILD(IDPList);
181 DECL_TYPED_CHILDREN(RequesterID);
182 /** ScopingType local name */
183 static const XMLCh TYPE_NAME[];
184 /** ProxyCount value to express no restriction*/
185 static const int NO_PROXY_COUNT;
188 BEGIN_XMLOBJECT(SAML_API,AuthnRequest,Request,SAML 2.0 AuthnRequest element);
189 DECL_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN);
190 DECL_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE);
191 DECL_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING);
192 DECL_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX);
193 DECL_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL);
194 DECL_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX);
195 DECL_STRING_ATTRIB(ProviderName,PROVIDERNAME);
197 DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
198 DECL_TYPED_CHILD(NameIDPolicy);
199 DECL_TYPED_FOREIGN_CHILD(Conditions,saml2);
200 DECL_TYPED_CHILD(RequestedAuthnContext);
201 DECL_TYPED_CHILD(Scoping);
202 /** AuthnRequestType local name */
203 static const XMLCh TYPE_NAME[];
206 BEGIN_XMLOBJECT(SAML_API,Response,StatusResponse,SAML 2.0 Response element);
207 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
208 DECL_TYPED_FOREIGN_CHILDREN(EncryptedAssertion,saml2);
209 /** ResponseType local name */
210 static const XMLCh TYPE_NAME[];
213 BEGIN_XMLOBJECT(SAML_API,ArtifactResolve,Request,SAML 2.0 ArtifactResolve element);
214 DECL_TYPED_CHILD(Artifact);
215 /** ArtifiactResolveType local name */
216 static const XMLCh TYPE_NAME[];
219 BEGIN_XMLOBJECT(SAML_API,ArtifactResponse,StatusResponse,SAML 2.0 ArtifactResponse element);
220 DECL_XMLOBJECT_CHILD(Payload);
221 /** ArtifiactResponseType local name */
222 static const XMLCh TYPE_NAME[];
225 BEGIN_XMLOBJECT(SAML_API,Terminate,xmltooling::XMLObject,SAML 2.0 Terminate element);
226 /** TerminateType local name */
227 static const XMLCh TYPE_NAME[];
230 BEGIN_XMLOBJECT(SAML_API,NewEncryptedID,saml2::EncryptedElementType,SAML 2.0 NewEncryptedID element);
233 BEGIN_XMLOBJECT(SAML_API,ManageNameIDRequest,Request,SAML 2.0 ManageNameIDRequest element);
234 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
235 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
236 DECL_TYPED_CHILD(NewID);
237 DECL_TYPED_CHILD(NewEncryptedID);
238 DECL_TYPED_CHILD(Terminate);
239 /** ManageNameIDRequestType local name */
240 static const XMLCh TYPE_NAME[];
243 BEGIN_XMLOBJECT(SAML_API,ManageNameIDResponse,StatusResponse,SAML 2.0 ManageNameIDResponse element);
246 BEGIN_XMLOBJECT(SAML_API,LogoutRequest,Request,SAML 2.0 LogoutRequest element);
247 DECL_STRING_ATTRIB(Reason,REASON);
248 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
249 DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
250 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
251 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
252 DECL_TYPED_CHILDREN(SessionIndex);
253 /** LogoutRequestType local name */
254 static const XMLCh TYPE_NAME[];
257 BEGIN_XMLOBJECT(SAML_API,LogoutResponse,StatusResponse,SAML 2.0 LogoutResponse element);
260 BEGIN_XMLOBJECT(SAML_API,NameIDMappingRequest,Request,SAML 2.0 NameIDMappingRequest element);
261 DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
262 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
263 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
264 DECL_TYPED_CHILD(NameIDPolicy);
265 /** NameIDMappingRequestType local name */
266 static const XMLCh TYPE_NAME[];
269 BEGIN_XMLOBJECT(SAML_API,NameIDMappingResponse,StatusResponse,SAML 2.0 NameIDMappingResponse element);
270 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
271 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
272 /** NameIDMappingResponseType local name */
273 static const XMLCh TYPE_NAME[];
278 DECL_SAML2POBJECTBUILDER(Artifact);
279 DECL_SAML2POBJECTBUILDER(ArtifactResolve);
280 DECL_SAML2POBJECTBUILDER(ArtifactResponse);
281 DECL_SAML2POBJECTBUILDER(AssertionIDRequest);
282 DECL_SAML2POBJECTBUILDER(AttributeQuery);
283 DECL_SAML2POBJECTBUILDER(AuthnQuery);
284 DECL_SAML2POBJECTBUILDER(AuthnRequest);
285 DECL_SAML2POBJECTBUILDER(AuthzDecisionQuery);
286 DECL_SAML2POBJECTBUILDER(Extensions);
287 DECL_SAML2POBJECTBUILDER(GetComplete);
288 DECL_SAML2POBJECTBUILDER(IDPEntry);
289 DECL_SAML2POBJECTBUILDER(IDPList);
290 DECL_SAML2POBJECTBUILDER(LogoutRequest);
291 DECL_SAML2POBJECTBUILDER(LogoutResponse);
292 DECL_SAML2POBJECTBUILDER(ManageNameIDRequest);
293 DECL_SAML2POBJECTBUILDER(ManageNameIDResponse);
294 DECL_SAML2POBJECTBUILDER(NameIDMappingRequest);
295 DECL_SAML2POBJECTBUILDER(NameIDMappingResponse);
296 DECL_SAML2POBJECTBUILDER(NameIDPolicy);
297 DECL_SAML2POBJECTBUILDER(NewEncryptedID);
298 DECL_SAML2POBJECTBUILDER(NewID);
299 DECL_SAML2POBJECTBUILDER(RequestedAuthnContext);
300 DECL_SAML2POBJECTBUILDER(RequesterID);
301 DECL_SAML2POBJECTBUILDER(Response);
302 DECL_SAML2POBJECTBUILDER(Scoping);
303 DECL_SAML2POBJECTBUILDER(SessionIndex);
304 DECL_SAML2POBJECTBUILDER(Status);
305 DECL_SAML2POBJECTBUILDER(StatusCode);
306 DECL_SAML2POBJECTBUILDER(StatusDetail);
307 DECL_SAML2POBJECTBUILDER(StatusMessage);
308 DECL_SAML2POBJECTBUILDER(Terminate);
315 * Builder for StatusResponse objects.
317 * This is customized to force the element name to be specified.
319 class SAML_API StatusResponseBuilder : public xmltooling::XMLObjectBuilder {
321 virtual ~StatusResponseBuilder() {}
322 /** Builder that allows element/type override. */
323 virtual StatusResponse* buildObject(
324 const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL, const xmltooling::QName* schemaType=NULL
327 /** Singleton builder. */
328 static StatusResponse* buildStatusResponse(const XMLCh* nsURI, const XMLCh* localName, const XMLCh* prefix=NULL) {
329 const StatusResponseBuilder* b = dynamic_cast<const StatusResponseBuilder*>(
330 XMLObjectBuilder::getBuilder(xmltooling::QName(SAMLConstants::SAML20P_NS,StatusResponse::TYPE_NAME))
333 xmltooling::QName schemaType(SAMLConstants::SAML20P_NS,StatusResponse::TYPE_NAME,SAMLConstants::SAML20P_PREFIX);
334 return b->buildObject(nsURI, localName, prefix, &schemaType);
336 throw xmltooling::XMLObjectException("Unable to obtain typed builder for StatusResponse.");
342 * Registers builders and validators for SAML 2.0 Protocol classes into the runtime.
344 void SAML_API registerProtocolClasses();
347 * Validator suite for SAML 2.0 Protocol schema validation.
349 extern SAML_API xmltooling::ValidatorSuite ProtocolSchemaValidators;
353 #endif /* __saml2_protocols_h__ */