Ejemplo n.º 1
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml,
                                                                                                  SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);

                switch (tokenReferenceStyle)
                {
                case SecurityTokenReferenceStyle.Internal:
                    return(CreateDirectReference(issuedTokenXml, UtilityStrings.IdAttribute, UtilityStrings.Namespace, typeof(SecurityContextSecurityToken)));

                case SecurityTokenReferenceStyle.External:
                    UniqueId contextId  = null;
                    UniqueId generation = null;
                    foreach (XmlNode node in issuedTokenXml.ChildNodes)
                    {
                        XmlElement element = node as XmlElement;
                        if (element != null)
                        {
                            if (element.LocalName == parent.SerializerDictionary.Identifier.Value && element.NamespaceURI == parent.SerializerDictionary.Namespace.Value)
                            {
                                contextId = XmlHelper.ReadTextElementAsUniqueId(element);
                            }
                            else if (CanReadGeneration(element))
                            {
                                generation = ReadGeneration(element);
                            }
                        }
                    }
                    return(new SecurityContextKeyIdentifierClause(contextId, generation));

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("tokenReferenceStyle"));
                }
            }
Ejemplo n.º 2
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml,
                                                                                                  SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);

                switch (tokenReferenceStyle)
                {
                case SecurityTokenReferenceStyle.Internal:
                    return(CreateDirectReference(issuedTokenXml, UtilityStrings.IdAttribute, UtilityStrings.Namespace, TokenType));

                case SecurityTokenReferenceStyle.External:
                    string encoding    = issuedTokenXml.GetAttribute(EncodingTypeAttributeString, null);
                    string encodedData = issuedTokenXml.InnerText;

                    byte[] binaryData;
                    if (encoding == null || encoding == EncodingTypeValueBase64Binary)
                    {
                        binaryData = Convert.FromBase64String(encodedData);
                    }
                    else if (encoding == EncodingTypeValueHexBinary)
                    {
                        binaryData = HexBinary.Parse(encodedData).Value;
                    }
                    else
                    {
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new MessageSecurityException(SR.UnknownEncodingInBinarySecurityToken));
                    }

                    return(CreateKeyIdentifierClauseFromBinaryCore(binaryData));

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException(nameof(tokenReferenceStyle)));
                }
            }
Ejemplo n.º 3
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml, SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
                if (tokenReferenceStyle == SecurityTokenReferenceStyle.Internal)
                {
                    return(WSSecurityTokenSerializer.TokenEntry.CreateDirectReference(issuedTokenXml, "Id", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", typeof(SecurityContextSecurityToken)));
                }
                if (tokenReferenceStyle != SecurityTokenReferenceStyle.External)
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError((Exception) new ArgumentOutOfRangeException("tokenReferenceStyle"));
                }
                UniqueId contextId  = (UniqueId)null;
                UniqueId generation = (UniqueId)null;

                foreach (XmlNode childNode in issuedTokenXml.ChildNodes)
                {
                    XmlElement element = childNode as XmlElement;
                    if (element != null)
                    {
                        if (element.LocalName == this.parent.SerializerDictionary.Identifier.Value && element.NamespaceURI == this.parent.SerializerDictionary.Namespace.Value)
                        {
                            contextId = XmlHelper.ReadTextElementAsUniqueId(element);
                        }
                        else if (this.CanReadGeneration(element))
                        {
                            generation = this.ReadGeneration(element);
                        }
                    }
                }
                return((SecurityKeyIdentifierClause) new SecurityContextKeyIdentifierClause(contextId, generation));
            }
Ejemplo n.º 4
0
 public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml, SecurityTokenReferenceStyle tokenReferenceStyle)
 {
     TokenReferenceStyleHelper.Validate(tokenReferenceStyle);
     if (tokenReferenceStyle == SecurityTokenReferenceStyle.Internal)
     {
         return(WSSecurityTokenSerializer.TokenEntry.CreateDirectReference(issuedTokenXml, "Id", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd", typeof(DerivedKeySecurityToken)));
     }
     if (tokenReferenceStyle == SecurityTokenReferenceStyle.External)
     {
         return((SecurityKeyIdentifierClause)null);
     }
     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError((Exception) new ArgumentOutOfRangeException("tokenReferenceStyle"));
 }
Ejemplo n.º 5
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml,
                                                                                                  SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);

                switch (tokenReferenceStyle)
                {
                case SecurityTokenReferenceStyle.Internal:
                    return(CreateDirectReference(issuedTokenXml, XmlEncryptionStrings.Id, null, null));

                case SecurityTokenReferenceStyle.External:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new XmlException(string.Format(SRServiceModel.CantInferReferenceForToken, EncryptedKey.ElementName.Value)));

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("tokenReferenceStyle"));
                }
            }
Ejemplo n.º 6
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml,
                                                                                                  SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);

                switch (tokenReferenceStyle)
                {
                // SAML uses same reference for internal and external
                case SecurityTokenReferenceStyle.Internal:
                case SecurityTokenReferenceStyle.External:
                    string assertionId = issuedTokenXml.GetAttribute(samlAssertionId);
                    return(new SamlAssertionKeyIdentifierClause(assertionId));

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("tokenReferenceStyle"));
                }
            }
Ejemplo n.º 7
0
            public override SecurityKeyIdentifierClause CreateKeyIdentifierClauseFromTokenXmlCore(XmlElement issuedTokenXml,
                                                                                                  SecurityTokenReferenceStyle tokenReferenceStyle)
            {
                TokenReferenceStyleHelper.Validate(tokenReferenceStyle);

                switch (tokenReferenceStyle)
                {
                case SecurityTokenReferenceStyle.Internal:
                    return(CreateDirectReference(issuedTokenXml, UtilityStrings.IdAttribute, UtilityStrings.Namespace, typeof(DerivedKeySecurityToken)));

                case SecurityTokenReferenceStyle.External:
                    // DerivedKeys aren't referred to externally
                    return(null);

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentOutOfRangeException("tokenReferenceStyle"));
                }
            }