< Summary - CoreWCF Coverage — PR #1766

Information
Class: CoreWCF.Security.WSSecurityJan2004
Assembly: CoreWCF.Primitives
File(s): /home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/WSSecurityJan2004.cs
Line coverage
34%
Covered lines: 83
Uncovered lines: 158
Coverable lines: 241
Total lines: 614
Line coverage: 34.4%
Branch coverage
17%
Covered branches: 17
Total branches: 98
Branch coverage: 17.3%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

File(s)

/home/runner/work/CoreWCF/CoreWCF/src/CoreWCF.Primitives/src/CoreWCF/Security/WSSecurityJan2004.cs

#LineLine coverage
 1// Licensed to the .NET Foundation under one or more agreements.
 2// The .NET Foundation licenses this file to you under the MIT license.
 3
 4using System;
 5using System.Collections.Generic;
 6using System.Security.Cryptography.X509Certificates;
 7using System.Xml;
 8using CoreWCF.IdentityModel;
 9using CoreWCF.IdentityModel.Selectors;
 10using CoreWCF.IdentityModel.Tokens;
 11using CoreWCF.Security.Tokens;
 12using HexBinary = CoreWCF.Security.SoapHexBinary;
 13using TokenEntry = CoreWCF.Security.WSSecurityTokenSerializer.TokenEntry;
 14
 15namespace CoreWCF.Security
 16{
 17    internal class WSSecurityJan2004 : WSSecurityTokenSerializer.SerializerEntries
 18    {
 13219        public WSSecurityJan2004(WSSecurityTokenSerializer tokenSerializer, SamlSerializer samlSerializer)
 20        {
 13221            WSSecurityTokenSerializer = tokenSerializer;
 13222            SamlSerializer = samlSerializer;
 13223        }
 24
 52825        public WSSecurityTokenSerializer WSSecurityTokenSerializer { get; }
 26
 13227        public SamlSerializer SamlSerializer { get; }
 28
 29        protected void PopulateJan2004TokenEntries(IList<TokenEntry> tokenEntryList)
 30        {
 13231            tokenEntryList.Add(new GenericXmlTokenEntry());
 13232            tokenEntryList.Add(new UserNamePasswordTokenEntry(WSSecurityTokenSerializer));
 13233            tokenEntryList.Add(new X509TokenEntry(WSSecurityTokenSerializer));
 13234        }
 35
 36        public override void PopulateTokenEntries(IList<TokenEntry> tokenEntryList)
 37        {
 638            PopulateJan2004TokenEntries(tokenEntryList);
 639            tokenEntryList.Add(new SamlTokenEntry(WSSecurityTokenSerializer, SamlSerializer));
 640            tokenEntryList.Add(new WrappedKeyTokenEntry(WSSecurityTokenSerializer));
 641        }
 42
 43        protected class SamlTokenEntry : TokenEntry
 44        {
 45            private readonly SamlSerializer _samlSerializer;
 46            private readonly SecurityTokenSerializer _tokenSerializer;
 47
 13248            public SamlTokenEntry(SecurityTokenSerializer tokenSerializer, SamlSerializer samlSerializer)
 49            {
 13250                _tokenSerializer = tokenSerializer;
 13251                if (samlSerializer != null)
 52                {
 053                    _samlSerializer = samlSerializer;
 54                }
 55                else
 56                {
 13257                    _samlSerializer = new SamlSerializer();
 58                }
 13259            }
 60
 3061            protected override XmlDictionaryString LocalName { get { return XD.SecurityJan2004Dictionary.SamlAssertion; 
 3062            protected override XmlDictionaryString NamespaceUri { get { return XD.SecurityJan2004Dictionary.SamlUri; } }
 1063            protected override Type[] GetTokenTypesCore() { return new Type[] { typeof(SamlSecurityToken) }; }
 064            public override string TokenTypeUri { get { return null; } }
 065            protected override string ValueTypeUri { get { return null; } }
 66
 67            //we don't need it, as we we populate differently in SamlSerializer
 68            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedToken
 69                SecurityTokenReferenceStyle tokenReferenceStyle)
 70            {
 071                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
 72
 73                switch (tokenReferenceStyle)
 74                {
 75                    // SAML uses same reference for internal and external
 76                    case SecurityTokenReferenceStyle.Internal:
 77                    case SecurityTokenReferenceStyle.External:
 078                        throw new NotImplementedException();
 79                       // return new SamlAssertionKeyIdentifierClause(assertionId);
 80                    default:
 081                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof
 82                }
 83            }
 84
 85            public override SecurityToken ReadTokenCore(XmlDictionaryReader reader, SecurityTokenResolver tokenResolver)
 86            {
 087                SamlSecurityToken samlToken = _samlSerializer.ReadToken(reader, _tokenSerializer, tokenResolver);
 088                return samlToken;
 89            }
 90
 91            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
 92            {
 093                throw new NotImplementedException();
 94            }
 95        }
 96
 97        internal abstract class BinaryTokenEntry : TokenEntry
 98        {
 299            internal static readonly XmlDictionaryString s_elementName = XD.SecurityJan2004Dictionary.BinarySecurityToke
 2100            internal static readonly XmlDictionaryString s_encodingTypeAttribute = XD.SecurityJan2004Dictionary.Encoding
 101            internal const string EncodingTypeAttributeString = SecurityJan2004Strings.EncodingType;
 102            internal const string EncodingTypeValueBase64Binary = SecurityJan2004Strings.EncodingTypeValueBase64Binary;
 103            internal const string EncodingTypeValueHexBinary = SecurityJan2004Strings.EncodingTypeValueHexBinary;
 2104            internal static readonly XmlDictionaryString s_valueTypeAttribute = XD.SecurityJan2004Dictionary.ValueType;
 105
 106            private readonly WSSecurityTokenSerializer _tokenSerializer;
 107            private readonly string[] _valueTypeUris = null;
 108
 132109            protected BinaryTokenEntry(WSSecurityTokenSerializer tokenSerializer, string valueTypeUri)
 110            {
 132111                _tokenSerializer = tokenSerializer;
 132112                _valueTypeUris = new string[1];
 132113                _valueTypeUris[0] = valueTypeUri;
 132114            }
 115
 0116            protected BinaryTokenEntry(WSSecurityTokenSerializer tokenSerializer, string[] valueTypeUris)
 117            {
 0118                if (valueTypeUris == null)
 119                {
 0120                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(valueTypeUris));
 121                }
 122
 0123                _tokenSerializer = tokenSerializer;
 0124                _valueTypeUris = new string[valueTypeUris.GetLength(0)];
 0125                for (int i = 0; i < _valueTypeUris.GetLength(0); ++i)
 126                {
 0127                    _valueTypeUris[i] = valueTypeUris[i];
 128                }
 0129            }
 130
 33131            protected override XmlDictionaryString LocalName { get { return s_elementName; } }
 33132            protected override XmlDictionaryString NamespaceUri { get { return XD.SecurityJan2004Dictionary.Namespace; }
 0133            public override string TokenTypeUri { get { return _valueTypeUris[0]; } }
 3134            protected override string ValueTypeUri { get { return _valueTypeUris[0]; } }
 135            public override bool SupportsTokenTypeUri(string tokenTypeUri)
 136            {
 0137                for (int i = 0; i < _valueTypeUris.GetLength(0); ++i)
 138                {
 0139                    if (_valueTypeUris[i] == tokenTypeUri)
 140                    {
 0141                        return true;
 142                    }
 143                }
 144
 0145                return false;
 146            }
 147
 148            public abstract SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromBinaryCore(byte[] rawData);
 149
 150            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedToken
 151                SecurityTokenReferenceStyle tokenReferenceStyle)
 152            {
 0153                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
 154
 155                switch (tokenReferenceStyle)
 156                {
 157                    case SecurityTokenReferenceStyle.Internal:
 0158                        return CreateDirectReference(issuedTokenXml, UtilityStrings.IdAttribute, UtilityStrings.Namespac
 159                    case SecurityTokenReferenceStyle.External:
 0160                        string encoding = issuedTokenXml.GetAttribute(EncodingTypeAttributeString, null);
 0161                        string encodedData = issuedTokenXml.InnerText;
 162
 163                        byte[] binaryData;
 0164                        if (encoding == null || encoding == EncodingTypeValueBase64Binary)
 165                        {
 0166                            binaryData = Convert.FromBase64String(encodedData);
 167                        }
 0168                        else if (encoding == EncodingTypeValueHexBinary)
 169                        {
 0170                            binaryData = HexBinary.Parse(encodedData).Value;
 171                        }
 172                        else
 173                        {
 0174                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Un
 175                        }
 176
 0177                        return CreateKeyIdentifierClauseFromBinaryCore(binaryData);
 178                    default:
 0179                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof
 180                }
 181            }
 182
 183            public abstract SecurityToken ReadBinaryCore(string id, string valueTypeUri, byte[] rawData);
 184
 185            public override SecurityToken ReadTokenCore(XmlDictionaryReader reader, SecurityTokenResolver tokenResolver)
 186            {
 3187                string wsuId = reader.GetAttribute(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace);
 3188                string valueTypeUri = reader.GetAttribute(s_valueTypeAttribute, null);
 3189                string encoding = reader.GetAttribute(s_encodingTypeAttribute, null);
 190
 191                byte[] binaryData;
 3192                if (encoding == null || encoding == EncodingTypeValueBase64Binary)
 193                {
 3194                    binaryData = reader.ReadElementContentAsBase64();
 195                }
 0196                else if (encoding == EncodingTypeValueHexBinary)
 197                {
 0198                    binaryData = HexBinary.Parse(reader.ReadElementContentAsString()).Value;
 199                }
 200                else
 201                {
 0202                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.UnknownEnc
 203                }
 204
 3205                return ReadBinaryCore(wsuId, valueTypeUri, binaryData);
 206            }
 207
 208            public abstract void WriteBinaryCore(SecurityToken token, out string id, out byte[] rawData);
 209
 210            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
 211            {
 0212                WriteBinaryCore(token, out string id, out byte[] rawData);
 213
 0214                if (rawData == null)
 215                {
 0216                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(rawData));
 217                }
 218
 0219                writer.WriteStartElement(XD.SecurityJan2004Dictionary.Prefix.Value, s_elementName, XD.SecurityJan2004Dic
 0220                if (id != null)
 221                {
 0222                    writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.
 223                }
 0224                if (_valueTypeUris != null)
 225                {
 0226                    writer.WriteAttributeString(s_valueTypeAttribute, null, _valueTypeUris[0]);
 227                }
 0228                if (_tokenSerializer.EmitBspRequiredAttributes)
 229                {
 0230                    writer.WriteAttributeString(s_encodingTypeAttribute, null, EncodingTypeValueBase64Binary);
 231                }
 0232                writer.WriteBase64(rawData, 0, rawData.Length);
 0233                writer.WriteEndElement(); // BinarySecurityToken
 0234            }
 235        }
 236
 237        private class GenericXmlTokenEntry : TokenEntry
 238        {
 0239            protected override XmlDictionaryString LocalName { get { return null; } }
 0240            protected override XmlDictionaryString NamespaceUri { get { return null; } }
 10241            protected override Type[] GetTokenTypesCore() { return new Type[] { typeof(GenericXmlSecurityToken) }; }
 0242            public override string TokenTypeUri { get { return null; } }
 0243            protected override string ValueTypeUri { get { return null; } }
 244
 132245            public GenericXmlTokenEntry()
 246            {
 132247            }
 248
 249
 250            public override bool CanReadTokenCore(XmlElement element)
 251            {
 0252                return false;
 253            }
 254
 255            public override bool CanReadTokenCore(XmlDictionaryReader reader)
 256            {
 51257                return false;
 258            }
 259
 260            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedToken
 261                SecurityTokenReferenceStyle tokenReferenceStyle)
 262            {
 0263                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException());
 264            }
 265
 266            public override SecurityToken ReadTokenCore(XmlDictionaryReader reader, SecurityTokenResolver tokenResolver)
 267            {
 0268                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException());
 269            }
 270
 271            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
 272            {
 0273                if (token is BufferedGenericXmlSecurityToken bufferedXmlToken && bufferedXmlToken.TokenXmlBuffer != null
 274                {
 0275                    using (XmlDictionaryReader reader = bufferedXmlToken.TokenXmlBuffer.GetReader(0))
 276                    {
 0277                        writer.WriteNode(reader, false);
 0278                    }
 279                }
 280                else
 281                {
 0282                    GenericXmlSecurityToken xmlToken = (GenericXmlSecurityToken)token;
 0283                    xmlToken.TokenXml.WriteTo(writer);
 284                }
 0285            }
 286        }
 287
 288        protected class WrappedKeyTokenEntry : TokenEntry
 289        {
 290            private readonly WSSecurityTokenSerializer _tokenSerializer;
 291
 132292            public WrappedKeyTokenEntry(WSSecurityTokenSerializer tokenSerializer)
 293            {
 132294                _tokenSerializer = tokenSerializer;
 132295            }
 296
 30297            protected override XmlDictionaryString LocalName { get { return EncryptedKey.ElementName; } }
 30298            protected override XmlDictionaryString NamespaceUri { get { return XD.XmlEncryptionDictionary.Namespace; } }
 10299            protected override Type[] GetTokenTypesCore() { return new Type[] { typeof(WrappedKeySecurityToken) }; }
 0300            public override string TokenTypeUri { get { return null; } }
 0301            protected override string ValueTypeUri { get { return null; } }
 302
 303            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedToken
 304                SecurityTokenReferenceStyle tokenReferenceStyle)
 305            {
 306
 0307                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
 308
 309                switch (tokenReferenceStyle)
 310                {
 311                    case SecurityTokenReferenceStyle.Internal:
 0312                        return CreateDirectReference(issuedTokenXml, XmlEncryptionStrings.Id, null, null);
 313                    case SecurityTokenReferenceStyle.External:
 0314                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(SR.Format(SR.CantInfe
 315                    default:
 0316                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof
 317                }
 318            }
 319
 320            public override SecurityToken ReadTokenCore(XmlDictionaryReader reader, SecurityTokenResolver tokenResolver)
 321            {
 0322                EncryptedKey encryptedKey = new EncryptedKey
 0323                {
 0324                    SecurityTokenSerializer = _tokenSerializer
 0325                };
 0326                encryptedKey.ReadFrom(reader);
 0327                SecurityKeyIdentifier unwrappingTokenIdentifier = encryptedKey.KeyIdentifier;
 0328                byte[] wrappedKey = encryptedKey.GetWrappedKey();
 0329                WrappedKeySecurityToken wrappedKeyToken = CreateWrappedKeyToken(encryptedKey.Id, encryptedKey.Encryption
 0330                    encryptedKey.CarriedKeyName, unwrappingTokenIdentifier, wrappedKey, tokenResolver);
 0331                wrappedKeyToken.EncryptedKey = encryptedKey;
 332
 0333                return wrappedKeyToken;
 334            }
 335
 336            private WrappedKeySecurityToken CreateWrappedKeyToken(string id, string encryptionMethod, string carriedKeyN
 337                SecurityKeyIdentifier unwrappingTokenIdentifier, byte[] wrappedKey, SecurityTokenResolver tokenResolver)
 338            {
 0339                if (tokenResolver is ISspiNegotiationInfo sspiResolver)
 340                {
 0341                    ISspiNegotiation unwrappingSspiContext = sspiResolver.SspiNegotiation;
 342                    // ensure that the encryption algorithm is compatible
 0343                    if (encryptionMethod != unwrappingSspiContext.KeyEncryptionAlgorithm)
 344                    {
 0345                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format
 346                    }
 0347                    byte[] unwrappedKey = unwrappingSspiContext.Decrypt(wrappedKey);
 0348                    return new WrappedKeySecurityToken(id, unwrappedKey, encryptionMethod, unwrappingSspiContext, unwrap
 349                }
 350                else
 351                {
 0352                    if (tokenResolver == null)
 353                    {
 0354                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException(nameof(token
 355                    }
 0356                    if (unwrappingTokenIdentifier == null || unwrappingTokenIdentifier.Count == 0)
 357                    {
 0358                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.Format
 359                    }
 360
 361                    SecurityToken unwrappingToken;
 0362                    if (tokenResolver is SecurityHeaderTokenResolver resolver)
 363                    {
 0364                        unwrappingToken = resolver.ExpectedWrapper;
 0365                        if (unwrappingToken != null)
 366                        {
 0367                            if (!resolver.CheckExternalWrapperMatch(unwrappingTokenIdentifier))
 368                            {
 0369                                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(
 0370                                    SR.Format(SR.EncryptedKeyWasNotEncryptedWithTheRequiredEncryptingToken, unwrappingTo
 371                            }
 372                        }
 373                        else
 374                        {
 0375                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(
 0376                                SR.Format(SR.UnableToResolveKeyInfoForUnwrappingToken, unwrappingTokenIdentifier, resolv
 377                        }
 378                    }
 379                    else
 380                    {
 381                        try
 382                        {
 0383                            unwrappingToken = tokenResolver.ResolveToken(unwrappingTokenIdentifier);
 0384                        }
 0385                        catch (Exception exception)
 386                        {
 0387                            if (exception is MessageSecurityException)
 0388                                throw;
 389
 0390                            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(
 0391                                SR.Format(SR.UnableToResolveKeyInfoForUnwrappingToken, unwrappingTokenIdentifier, tokenR
 392                        }
 393                    }
 0394                    byte[] unwrappedKey = SecurityUtils.DecryptKey(unwrappingToken, encryptionMethod, wrappedKey, out Se
 0395                    return new WrappedKeySecurityToken(id, unwrappedKey, encryptionMethod, unwrappingToken, unwrappingTo
 396                }
 397            }
 398
 399            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
 400            {
 0401                WrappedKeySecurityToken wrappedKeyToken = token as WrappedKeySecurityToken;
 0402                wrappedKeyToken.EnsureEncryptedKeySetUp();
 0403                wrappedKeyToken.EncryptedKey.SecurityTokenSerializer = _tokenSerializer;
 0404                wrappedKeyToken.EncryptedKey.WriteTo(writer, ServiceModelDictionaryManager.Instance);
 0405            }
 406        }
 407
 408        private class UserNamePasswordTokenEntry : TokenEntry
 409        {
 410            private readonly WSSecurityTokenSerializer _tokenSerializer;
 411
 132412            public UserNamePasswordTokenEntry(WSSecurityTokenSerializer tokenSerializer)
 413            {
 132414                _tokenSerializer = tokenSerializer;
 132415            }
 416
 51417            protected override XmlDictionaryString LocalName { get { return XD.SecurityJan2004Dictionary.UserNameTokenEl
 51418            protected override XmlDictionaryString NamespaceUri { get { return XD.SecurityJan2004Dictionary.Namespace; }
 10419            protected override Type[] GetTokenTypesCore() { return new Type[] { typeof(UserNameSecurityToken) }; }
 0420            public override string TokenTypeUri { get { return SecurityJan2004Strings.UPTokenType; } }
 18421            protected override string ValueTypeUri { get { return null; } }
 422
 423            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedToken
 424                SecurityTokenReferenceStyle tokenReferenceStyle)
 425            {
 0426                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
 427
 428                switch (tokenReferenceStyle)
 429                {
 430                    case SecurityTokenReferenceStyle.Internal:
 0431                        return CreateDirectReference(issuedTokenXml, UtilityStrings.IdAttribute, UtilityStrings.Namespac
 432                    case SecurityTokenReferenceStyle.External:
 433                        // UP tokens aren't referred to externally
 0434                        return null;
 435                    default:
 0436                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof
 437                }
 438            }
 439
 440            public override SecurityToken ReadTokenCore(XmlDictionaryReader reader, SecurityTokenResolver tokenResolver)
 441            {
 18442                ParseToken(reader, out string id, out string userName, out string password);
 443
 18444                if (id == null)
 445                {
 0446                    id = SecurityUniqueId.Create().Value;
 447                }
 448
 18449                return new UserNameSecurityToken(userName, password, id);
 450            }
 451
 452            public override void WriteTokenCore(XmlDictionaryWriter writer, SecurityToken token)
 453            {
 0454                UserNameSecurityToken upToken = (UserNameSecurityToken)token;
 0455                WriteUserNamePassword(writer, upToken.Id, upToken.UserName, upToken.Password);
 0456            }
 457
 458            private void WriteUserNamePassword(XmlDictionaryWriter writer, string id, string userName, string password)
 459            {
 0460                writer.WriteStartElement(XD.SecurityJan2004Dictionary.Prefix.Value, XD.SecurityJan2004Dictionary.UserNam
 0461                    XD.SecurityJan2004Dictionary.Namespace); // <wsse:UsernameToken
 0462                writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute,
 0463                    XD.UtilityDictionary.Namespace, id); // wsu:Id="..."
 0464                writer.WriteElementString(XD.SecurityJan2004Dictionary.Prefix.Value, XD.SecurityJan2004Dictionary.UserNa
 0465                    XD.SecurityJan2004Dictionary.Namespace, userName); // ><wsse:Username>...</wsse:Username>
 0466                if (password != null)
 467                {
 0468                    writer.WriteStartElement(XD.SecurityJan2004Dictionary.Prefix.Value, XD.SecurityJan2004Dictionary.Pas
 0469                        XD.SecurityJan2004Dictionary.Namespace);
 0470                    if (_tokenSerializer.EmitBspRequiredAttributes)
 471                    {
 0472                        writer.WriteAttributeString(XD.SecurityJan2004Dictionary.TypeAttribute, null, SecurityJan2004Str
 473                    }
 0474                    writer.WriteString(password); // <wsse:Password>...</wsse:Password>
 0475                    writer.WriteEndElement();
 476                }
 0477                writer.WriteEndElement(); // </wsse:UsernameToken>
 0478            }
 479
 480            private static string ParsePassword(XmlDictionaryReader reader)
 481            {
 18482                string type = reader.GetAttribute(XD.SecurityJan2004Dictionary.TypeAttribute, null);
 18483                if (type != null && type.Length > 0 && type != SecurityJan2004Strings.UPTokenPasswordTextValue)
 484                {
 0485                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new NotSupportedException(SR.Format(SR.Uns
 486                }
 487
 18488                return reader.ReadElementString();
 489            }
 490
 491            private static void ParseToken(XmlDictionaryReader reader, out string id, out string userName, out string pa
 492            {
 18493                userName = null;
 18494                password = null;
 495
 18496                reader.MoveToContent();
 18497                id = reader.GetAttribute(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace);
 498
 18499                reader.ReadStartElement(XD.SecurityJan2004Dictionary.UserNameTokenElement, XD.SecurityJan2004Dictionary.
 54500                while (reader.IsStartElement())
 501                {
 36502                    if (reader.IsStartElement(XD.SecurityJan2004Dictionary.UserNameElement, XD.SecurityJan2004Dictionary
 503                    {
 18504                        userName = reader.ReadElementString();
 505                    }
 18506                    else if (reader.IsStartElement(XD.SecurityJan2004Dictionary.PasswordElement, XD.SecurityJan2004Dicti
 507                    {
 18508                        password = ParsePassword(reader);
 509                    }
 0510                    else if (reader.IsStartElement(XD.SecurityJan2004Dictionary.NonceElement, XD.SecurityJan2004Dictiona
 511                    {
 512                        // Nonce can be safely ignored
 0513                        reader.Skip();
 514                    }
 0515                    else if (reader.IsStartElement(XD.UtilityDictionary.CreatedElement, XD.UtilityDictionary.Namespace))
 516                    {
 517                        // wsu:Created can be safely ignored
 0518                        reader.Skip();
 519                    }
 520                    else
 521                    {
 0522                        throw new NotImplementedException();
 523                        //  XmlHelper.OnUnexpectedChildNodeError(SecurityJan2004Strings.UserNameTokenElement, reader);
 524                    }
 525                }
 18526                reader.ReadEndElement();
 527
 18528                if (userName == null)
 529                {
 0530                    throw new NotImplementedException();
 531                    //  XmlHelper.OnRequiredElementMissing(SecurityJan2004Strings.UserNameElement, SecurityJan2004String
 532                }
 18533            }
 534        }
 535
 536        protected class X509TokenEntry : BinaryTokenEntry
 537        {
 538            internal const string ValueTypeAbsoluteUri = SecurityJan2004Strings.X509TokenType;
 539
 540            public X509TokenEntry(WSSecurityTokenSerializer tokenSerializer)
 132541                : base(tokenSerializer, ValueTypeAbsoluteUri)
 542            {
 132543            }
 544
 10545            protected override Type[] GetTokenTypesCore() { return new Type[] { typeof(X509SecurityToken) }; }
 546
 547            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromBinaryCore(byte[] rawData)
 548            {
 0549                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(SR.Format(SR.CantInferReferen
 550            }
 551
 552            public override SecurityToken ReadBinaryCore(string id, string valueTypeUri, byte[] rawData)
 553            {
 3554                if (!SecurityUtils.TryCreateX509CertificateFromRawData(rawData, out X509Certificate2 certificate))
 555                {
 0556                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.InvalidX50
 557                }
 3558                return new X509SecurityToken(certificate, id, false);
 559            }
 560
 561            public override void WriteBinaryCore(SecurityToken token, out string id, out byte[] rawData)
 562            {
 0563                id = token.Id;
 0564                if (token is X509SecurityToken x509Token)
 565                {
 0566                    rawData = x509Token.Certificate.GetRawCertData();
 567                }
 568                else
 569                {
 0570                    throw new PlatformNotSupportedException();
 571                }
 572            }
 573        }
 574
 575        public class IdManager : SignatureTargetIdManager
 576        {
 3577            private IdManager()
 578            {
 3579            }
 580
 581            public override string DefaultIdNamespacePrefix
 582            {
 0583                get { return UtilityStrings.Prefix; }
 584            }
 585
 586            public override string DefaultIdNamespaceUri
 587            {
 0588                get { return UtilityStrings.Namespace; }
 589            }
 590
 134591            internal static IdManager Instance { get; } = new IdManager();
 592
 593            public override string ExtractId(XmlDictionaryReader reader)
 594            {
 0595                if (reader == null)
 596                {
 0597                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(reader));
 598                }
 599
 0600                return reader.GetAttribute(XD.UtilityDictionary.IdAttribute, XD.UtilityDictionary.Namespace);
 601            }
 602
 603            public override void WriteIdAttribute(XmlDictionaryWriter writer, string id)
 604            {
 0605                if (writer == null)
 606                {
 0607                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull(nameof(writer));
 608                }
 609
 0610                writer.WriteAttributeString(XD.UtilityDictionary.Prefix.Value, XD.UtilityDictionary.IdAttribute, XD.Util
 0611            }
 612        }
 613    }
 614}

Methods/Properties

.ctor(CoreWCF.Security.WSSecurityTokenSerializer,CoreWCF.Security.SamlSerializer)
WSSecurityTokenSerializer()
SamlSerializer()
PopulateJan2004TokenEntries(System.Collections.Generic.IList`1<CoreWCF.Security.WSSecurityTokenSerializer/TokenEntry>)
PopulateTokenEntries(System.Collections.Generic.IList`1<CoreWCF.Security.WSSecurityTokenSerializer/TokenEntry>)
.ctor(CoreWCF.IdentityModel.Selectors.SecurityTokenSerializer,CoreWCF.Security.SamlSerializer)
LocalName()
NamespaceUri()
GetTokenTypesCore()
TokenTypeUri()
ValueTypeUri()
CreateKeyIdentifierClauseFromTokenXmlCore(System.Xml.XmlElement,CoreWCF.Security.Tokens.SecurityTokenReferenceStyle)
ReadTokenCore(System.Xml.XmlDictionaryReader,CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
WriteTokenCore(System.Xml.XmlDictionaryWriter,CoreWCF.IdentityModel.Tokens.SecurityToken)
.cctor()
.ctor(CoreWCF.Security.WSSecurityTokenSerializer,System.String)
.ctor(CoreWCF.Security.WSSecurityTokenSerializer,System.String[])
LocalName()
NamespaceUri()
TokenTypeUri()
ValueTypeUri()
SupportsTokenTypeUri(System.String)
CreateKeyIdentifierClauseFromTokenXmlCore(System.Xml.XmlElement,CoreWCF.Security.Tokens.SecurityTokenReferenceStyle)
ReadTokenCore(System.Xml.XmlDictionaryReader,CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
WriteTokenCore(System.Xml.XmlDictionaryWriter,CoreWCF.IdentityModel.Tokens.SecurityToken)
LocalName()
NamespaceUri()
GetTokenTypesCore()
TokenTypeUri()
ValueTypeUri()
.ctor()
CanReadTokenCore(System.Xml.XmlElement)
CanReadTokenCore(System.Xml.XmlDictionaryReader)
CreateKeyIdentifierClauseFromTokenXmlCore(System.Xml.XmlElement,CoreWCF.Security.Tokens.SecurityTokenReferenceStyle)
ReadTokenCore(System.Xml.XmlDictionaryReader,CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
WriteTokenCore(System.Xml.XmlDictionaryWriter,CoreWCF.IdentityModel.Tokens.SecurityToken)
.ctor(CoreWCF.Security.WSSecurityTokenSerializer)
LocalName()
NamespaceUri()
GetTokenTypesCore()
TokenTypeUri()
ValueTypeUri()
CreateKeyIdentifierClauseFromTokenXmlCore(System.Xml.XmlElement,CoreWCF.Security.Tokens.SecurityTokenReferenceStyle)
ReadTokenCore(System.Xml.XmlDictionaryReader,CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
CreateWrappedKeyToken(System.String,System.String,System.String,CoreWCF.IdentityModel.Tokens.SecurityKeyIdentifier,System.Byte[],CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
WriteTokenCore(System.Xml.XmlDictionaryWriter,CoreWCF.IdentityModel.Tokens.SecurityToken)
.ctor(CoreWCF.Security.WSSecurityTokenSerializer)
LocalName()
NamespaceUri()
GetTokenTypesCore()
TokenTypeUri()
ValueTypeUri()
CreateKeyIdentifierClauseFromTokenXmlCore(System.Xml.XmlElement,CoreWCF.Security.Tokens.SecurityTokenReferenceStyle)
ReadTokenCore(System.Xml.XmlDictionaryReader,CoreWCF.IdentityModel.Selectors.SecurityTokenResolver)
WriteTokenCore(System.Xml.XmlDictionaryWriter,CoreWCF.IdentityModel.Tokens.SecurityToken)
WriteUserNamePassword(System.Xml.XmlDictionaryWriter,System.String,System.String,System.String)
ParsePassword(System.Xml.XmlDictionaryReader)
ParseToken(System.Xml.XmlDictionaryReader,System.String&,System.String&,System.String&)
.ctor(CoreWCF.Security.WSSecurityTokenSerializer)
GetTokenTypesCore()
CreateKeyIdentifierClauseFromBinaryCore(System.Byte[])
ReadBinaryCore(System.String,System.String,System.Byte[])
WriteBinaryCore(CoreWCF.IdentityModel.Tokens.SecurityToken,System.String&,System.Byte[]&)
.ctor()
DefaultIdNamespacePrefix()
DefaultIdNamespaceUri()
Instance()
ExtractId(System.Xml.XmlDictionaryReader)
WriteIdAttribute(System.Xml.XmlDictionaryWriter,System.String)