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.
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)
36 * SAML 2.0 protocol namespace
40 DECL_XMLOBJECT_SIMPLE(SAML_API,Artifact,Artifact,SAML 2.0 Artifact element);
41 DECL_XMLOBJECT_SIMPLE(SAML_API,GetComplete,GetComplete,SAML 2.0 GetComplete element);
42 DECL_XMLOBJECT_SIMPLE(SAML_API,NewID,NewID,SAML 2.0 NewID element);
43 DECL_XMLOBJECT_SIMPLE(SAML_API,RequesterID,RequesterID,SAML 2.0 RequesterID element);
44 DECL_XMLOBJECT_SIMPLE(SAML_API,SessionIndex,SessionIndex,SAML 2.0 SessionIndex element);
45 DECL_XMLOBJECT_SIMPLE(SAML_API,StatusMessage,Message,SAML 2.0 StatusMessage element);
47 BEGIN_XMLOBJECT(SAML_API,Extensions,xmltooling::ElementProxy,SAML 2.0 protocol Extensions element);
48 /** ExtensionsType local name */
49 static const XMLCh TYPE_NAME[];
52 BEGIN_XMLOBJECT(SAML_API,Request,SignableObject,SAML 2.0 Request element);
53 DECL_STRING_ATTRIB(ID,ID);
54 DECL_STRING_ATTRIB(Version,VER);
55 DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
56 DECL_STRING_ATTRIB(Destination,DESTINATION);
57 DECL_STRING_ATTRIB(Consent,CONSENT);
58 DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
59 DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
60 DECL_TYPED_CHILD(Extensions);
61 /** RequestAbstractType local name */
62 static const XMLCh TYPE_NAME[];
65 BEGIN_XMLOBJECT(SAML_API,StatusCode,xmltooling::XMLObject,SAML 2.0 StatusCode element);
66 DECL_STRING_ATTRIB(Value,VALUE);
67 DECL_TYPED_CHILD(StatusCode);
68 /** StatusCodeType local name */
69 static const XMLCh TYPE_NAME[];
72 BEGIN_XMLOBJECT(SAML_API,StatusDetail,xmltooling::XMLObject,SAML 2.0 StatusDetail element);
73 DECL_XMLOBJECT_CHILDREN(Detail);
74 /** StatusDetailType local name */
75 static const XMLCh TYPE_NAME[];
78 BEGIN_XMLOBJECT(SAML_API,Status,xmltooling::XMLObject,SAML 2.0 Status element);
79 DECL_TYPED_CHILD(StatusCode);
80 DECL_TYPED_CHILD(StatusMessage);
81 DECL_TYPED_CHILD(StatusDetail);
82 /** StatusType local name */
83 static const XMLCh TYPE_NAME[];
86 BEGIN_XMLOBJECT(SAML_API,StatusResponse,SignableObject,SAML 2.0 StatusResponse element);
87 DECL_STRING_ATTRIB(ID,ID);
88 DECL_STRING_ATTRIB(InResponseTo,INRESPONSETO);
89 DECL_STRING_ATTRIB(Version,VER);
90 DECL_DATETIME_ATTRIB(IssueInstant,ISSUEINSTANT);
91 DECL_STRING_ATTRIB(Destination,DESTINATION);
92 DECL_STRING_ATTRIB(Consent,CONSENT);
93 DECL_TYPED_FOREIGN_CHILD(Issuer,saml2);
94 DECL_TYPED_FOREIGN_CHILD(Signature,xmlsignature);
95 DECL_TYPED_CHILD(Extensions);
96 DECL_TYPED_CHILD(Status);
97 /** StatusResponseType local name */
98 static const XMLCh TYPE_NAME[];
101 BEGIN_XMLOBJECT(SAML_API,AssertionIDRequest,Request,SAML 2.0 AssertionIDRequest element);
102 DECL_TYPED_FOREIGN_CHILDREN(AssertionIDRef,saml2);
103 /** AssertionIDRequest local name */
104 static const XMLCh TYPE_NAME[];
107 BEGIN_XMLOBJECT(SAML_API,SubjectQuery,Request,SAML 2.0 SubjectQuery element);
108 DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
109 /** SubjectQueryType local name */
110 static const XMLCh TYPE_NAME[];
113 BEGIN_XMLOBJECT(SAML_API,RequestedAuthnContext,xmltooling::XMLObject,SAML 2.0 RequestedAuthnContext element);
114 //TODO whether, and how, to enforce the controlled vocabulary (schema enumeration) for the Comparison attrib, as in the Java ?
115 DECL_STRING_ATTRIB(Comparison,COMPARISON);
116 DECL_TYPED_FOREIGN_CHILDREN(AuthnContextClassRef,saml2);
117 DECL_TYPED_FOREIGN_CHILDREN(AuthnContextDeclRef,saml2);
118 /** exact Comparison */
119 static const XMLCh COMPARISON_EXACT[];
120 /** minimum Comparison */
121 static const XMLCh COMPARISON_MINIMUM[];
122 /** maximum Comparison */
123 static const XMLCh COMPARISON_MAXIMUM[];
124 /** better Comparison */
125 static const XMLCh COMPARISON_BETTER[];
126 /** RequestedAuthnContextType local name */
127 static const XMLCh TYPE_NAME[];
130 BEGIN_XMLOBJECT(SAML_API,AuthnQuery,SubjectQuery,SAML 2.0 AuthnQuery element);
131 DECL_STRING_ATTRIB(SessionIndex,SESSIONINDEX);
132 DECL_TYPED_CHILD(RequestedAuthnContext);
133 /** AuthnQueryType local name */
134 static const XMLCh TYPE_NAME[];
137 BEGIN_XMLOBJECT(SAML_API,AttributeQuery,SubjectQuery,SAML 2.0 AttributeQuery element);
138 DECL_TYPED_FOREIGN_CHILDREN(Attribute,saml2);
139 /** AttributeQueryType local name */
140 static const XMLCh TYPE_NAME[];
143 BEGIN_XMLOBJECT(SAML_API,AuthzDecisionQuery,SubjectQuery,SAML 2.0 AuthzDecisionQuery element);
144 DECL_STRING_ATTRIB(Resource,RESOURCE);
145 DECL_TYPED_FOREIGN_CHILDREN(Action,saml2);
146 DECL_TYPED_FOREIGN_CHILD(Evidence,saml2);
147 /** AuthzDecisionQueryType local name */
148 static const XMLCh TYPE_NAME[];
151 BEGIN_XMLOBJECT(SAML_API,NameIDPolicy,xmltooling::XMLObject,SAML 2.0 NameIDPolicy element);
152 DECL_STRING_ATTRIB(Format,FORMAT);
153 DECL_STRING_ATTRIB(SPNameQualifier,SPNAMEQUALIFIER);
154 DECL_BOOLEAN_ATTRIB(AllowCreate,ALLOWCREATE);
155 /** NameIDPolicyType local name */
156 static const XMLCh TYPE_NAME[];
159 BEGIN_XMLOBJECT(SAML_API,IDPEntry,xmltooling::XMLObject,SAML2.0 IDPEntry element);
160 DECL_STRING_ATTRIB(ProviderID,PROVIDERID);
161 DECL_STRING_ATTRIB(Name,NAME);
162 DECL_STRING_ATTRIB(Loc,LOC);
163 /** IDPEntryType local name */
164 static const XMLCh TYPE_NAME[];
167 BEGIN_XMLOBJECT(SAML_API,IDPList,xmltooling::XMLObject,SAML 2.0 IDPList element);
168 DECL_TYPED_CHILD(IDPEntry);
169 DECL_TYPED_CHILD(GetComplete);
170 /** IDPListType local name */
171 static const XMLCh TYPE_NAME[];
174 BEGIN_XMLOBJECT(SAML_API,Scoping,xmltooling::XMLObject,SAML 2.0 Scoping element);
175 DECL_INTEGER_ATTRIB(ProxyCount,PROXYCOUNT);
176 DECL_TYPED_CHILD(IDPList);
177 DECL_TYPED_CHILDREN(RequesterID);
178 /** ScopingType local name */
179 static const XMLCh TYPE_NAME[];
182 BEGIN_XMLOBJECT(SAML_API,AuthnRequest,Request,SAML 2.0 AuthnRequest element);
183 DECL_BOOLEAN_ATTRIB(ForceAuthn,FORCEAUTHN);
184 DECL_BOOLEAN_ATTRIB(IsPassive,ISPASSIVE);
185 DECL_STRING_ATTRIB(ProtocolBinding,PROTOCOLBINDING);
186 DECL_INTEGER_ATTRIB(AssertionConsumerServiceIndex,ASSERTIONCONSUMERSERVICEINDEX);
187 DECL_STRING_ATTRIB(AssertionConsumerServiceURL,ASSERTIONCONSUMERSERVICEURL);
188 DECL_INTEGER_ATTRIB(AttributeConsumingServiceIndex,ATTRIBUTECONSUMINGSERVICEINDEX);
189 DECL_STRING_ATTRIB(ProviderName,PROVIDERNAME);
191 DECL_TYPED_FOREIGN_CHILD(Subject,saml2);
192 DECL_TYPED_CHILD(NameIDPolicy);
193 DECL_TYPED_FOREIGN_CHILD(Conditions,saml2);
194 DECL_TYPED_CHILD(RequestedAuthnContext);
195 DECL_TYPED_CHILD(Scoping);
196 /** AuthnRequestType local name */
197 static const XMLCh TYPE_NAME[];
200 BEGIN_XMLOBJECT(SAML_API,Response,StatusResponse,SAML 2.0 Response element);
201 DECL_TYPED_FOREIGN_CHILDREN(Assertion,saml2);
202 DECL_TYPED_FOREIGN_CHILDREN(EncryptedAssertion,saml2);
203 /** ResponseType local name */
204 static const XMLCh TYPE_NAME[];
207 BEGIN_XMLOBJECT(SAML_API,ArtifactResolve,Request,SAML 2.0 ArtifactResolve element);
208 DECL_TYPED_CHILD(Artifact);
209 /** ArtifiactResolveType local name */
210 static const XMLCh TYPE_NAME[];
213 BEGIN_XMLOBJECT(SAML_API,ArtifactResponse,StatusResponse,SAML 2.0 ArtifactResponse element);
214 /** ArtifiactResponseType local name */
215 static const XMLCh TYPE_NAME[];
218 BEGIN_XMLOBJECT(SAML_API,Terminate,xmltooling::XMLObject,SAML 2.0 Terminate element);
219 /** TerminateType local name */
220 static const XMLCh TYPE_NAME[];
223 BEGIN_XMLOBJECT(SAML_API,NewEncryptedID,saml2::EncryptedElementType,SAML 2.0 EncryptedNewID element);
226 BEGIN_XMLOBJECT(SAML_API,ManageNameIDRequest,Request,SAML 2.0 ManageNameIDRequest element);
227 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
228 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
229 DECL_TYPED_CHILD(NewID);
230 DECL_TYPED_CHILD(NewEncryptedID);
231 DECL_TYPED_CHILD(Terminate);
232 /** ManageNameIDRequestType local name */
233 static const XMLCh TYPE_NAME[];
236 BEGIN_XMLOBJECT(SAML_API,ManageNameIDResponse,StatusResponse,SAML 2.0 ManageNameIDResponse element);
239 BEGIN_XMLOBJECT(SAML_API,LogoutRequest,Request,SAML 2.0 LogoutRequest element);
240 DECL_STRING_ATTRIB(Reason,REASON);
241 DECL_DATETIME_ATTRIB(NotOnOrAfter,NOTONORAFTER);
242 DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
243 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
244 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
245 DECL_TYPED_CHILDREN(SessionIndex);
246 /** LogoutRequestType local name */
247 static const XMLCh TYPE_NAME[];
250 BEGIN_XMLOBJECT(SAML_API,LogoutResponse,StatusResponse,SAML 2.0 LogoutResponse element);
253 BEGIN_XMLOBJECT(SAML_API,NameIDMappingRequest,Request,SAML 2.0 NameIDMappingRequest element);
254 DECL_TYPED_FOREIGN_CHILD(BaseID,saml2);
255 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
256 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
257 DECL_TYPED_CHILD(NameIDPolicy);
258 /** NameIDMappingRequestType local name */
259 static const XMLCh TYPE_NAME[];
262 BEGIN_XMLOBJECT(SAML_API,NameIDMappingResponse,StatusResponse,SAML 2.0 NameIDMappingResponse element);
263 DECL_TYPED_FOREIGN_CHILD(NameID,saml2);
264 DECL_TYPED_FOREIGN_CHILD(EncryptedID,saml2);
265 /** NameIDMappingResponseType local name */
266 static const XMLCh TYPE_NAME[];
269 //TODO custom builders, if any
272 DECL_SAML2POBJECTBUILDER(Artifact);
273 DECL_SAML2POBJECTBUILDER(ArtifactResolve);
274 DECL_SAML2POBJECTBUILDER(ArtifactResponse);
275 DECL_SAML2POBJECTBUILDER(AssertionIDRequest);
276 DECL_SAML2POBJECTBUILDER(AttributeQuery);
277 DECL_SAML2POBJECTBUILDER(AuthnQuery);
278 DECL_SAML2POBJECTBUILDER(AuthnRequest);
279 DECL_SAML2POBJECTBUILDER(AuthzDecisionQuery);
280 DECL_SAML2POBJECTBUILDER(Extensions);
281 DECL_SAML2POBJECTBUILDER(GetComplete);
282 DECL_SAML2POBJECTBUILDER(IDPEntry);
283 DECL_SAML2POBJECTBUILDER(IDPList);
284 DECL_SAML2POBJECTBUILDER(LogoutRequest);
285 DECL_SAML2POBJECTBUILDER(LogoutResponse);
286 DECL_SAML2POBJECTBUILDER(ManageNameIDRequest);
287 DECL_SAML2POBJECTBUILDER(ManageNameIDResponse);
288 DECL_SAML2POBJECTBUILDER(NameIDMappingRequest);
289 DECL_SAML2POBJECTBUILDER(NameIDMappingResponse);
290 DECL_SAML2POBJECTBUILDER(NameIDPolicy);
291 DECL_SAML2POBJECTBUILDER(NewEncryptedID);
292 DECL_SAML2POBJECTBUILDER(NewID);
293 DECL_SAML2POBJECTBUILDER(RequestedAuthnContext);
294 DECL_SAML2POBJECTBUILDER(RequesterID);
295 DECL_SAML2POBJECTBUILDER(Response);
296 DECL_SAML2POBJECTBUILDER(Scoping);
297 DECL_SAML2POBJECTBUILDER(SessionIndex);
298 DECL_SAML2POBJECTBUILDER(Status);
299 DECL_SAML2POBJECTBUILDER(StatusCode);
300 DECL_SAML2POBJECTBUILDER(StatusDetail);
301 DECL_SAML2POBJECTBUILDER(StatusMessage);
302 DECL_SAML2POBJECTBUILDER(Terminate);
306 * Registers builders and validators for Protocol classes into the runtime.
308 void SAML_API registerProtocolClasses();
312 #endif /* __saml2_protocols_h__ */