2 // SecurityTokenReference.cs: Handles WS-Security SecurityTokenReference
5 // Sebastien Pouliot (spouliot@motus.com)
7 // (C) 2002, 2003 Motus Technologies Inc. (http://www.motus.com)
11 using System
.Security
.Cryptography
.Xml
;
13 using Microsoft
.Web
.Services
;
15 using Microsoft
.Web
.Services
.Xml
;
18 namespace Microsoft
.Web
.Services
.Security
{
20 public class SecurityTokenReference
: KeyInfoClause
, IXmlElement
{
21 // TODO WSE2 public class SecurityTokenReference : SecurityTokenReferenceType
23 private KeyIdentifier kid
;
24 private string reference
;
26 public SecurityTokenReference () : base () {}
28 public SecurityTokenReference (XmlElement element
) : base ()
33 public KeyIdentifier KeyIdentifier
{
38 public string Reference
{
39 get { return reference; }
40 set { reference = value; }
43 // note: old format used by S.S.C.Xml
44 public override XmlElement
GetXml ()
46 return GetXml (new XmlDocument ());
49 public XmlElement
GetXml (XmlDocument document
)
52 throw new ArgumentNullException ("document");
54 XmlElement str
= document
.CreateElement (WSSecurity
.Prefix
, WSSecurity
.ElementNames
.SecurityTokenReference
, WSSecurity
.NamespaceURI
);
56 str
.AppendChild (kid
.GetXml (document
));
57 if (reference
!= null) {
58 XmlAttribute uri
= document
.CreateAttribute (WSSecurity
.AttributeNames
.Uri
);
59 uri
.InnerText
= "#" + reference
;
60 XmlElement r
= document
.CreateElement (WSSecurity
.Prefix
, WSSecurity
.ElementNames
.Reference
, WSSecurity
.NamespaceURI
);
61 r
.Attributes
.Append (uri
);
67 public override void LoadXml (XmlElement element
)
70 throw new ArgumentNullException ("element");
71 if ((element
.LocalName
!= WSSecurity
.ElementNames
.SecurityTokenReference
) || (element
.NamespaceURI
!= WSSecurity
.NamespaceURI
))
72 throw new System
.ArgumentException ("invalid LocalName or NamespaceURI");
74 XmlNodeList xnl
= element
.GetElementsByTagName (WSSecurity
.ElementNames
.KeyIdentifier
, WSSecurity
.NamespaceURI
);
75 if ((xnl
!= null) && (xnl
.Count
== 1)) {
76 kid
= new KeyIdentifier ((xnl
[0] as XmlElement
));
79 xnl
= element
.GetElementsByTagName (WSSecurity
.ElementNames
.Reference
, WSSecurity
.NamespaceURI
);
80 if ((xnl
!= null) && (xnl
.Count
== 1)) {
81 XmlAttribute uri
= xnl
[0].Attributes
[WSSecurity
.AttributeNames
.Uri
];
83 reference
= uri
.InnerText
;
84 if (reference
[0] == '#')
85 reference
= reference
.Substring (1);