Exemplo n.º 1
0
            public override SecurityTokenProvider CreateSecurityTokenProvider(SecurityTokenRequirement tokenRequirement)
            {
                ServiceModelSecurityTokenRequirement requirement = tokenRequirement as ServiceModelSecurityTokenRequirement;

                if (requirement != null)
                {
                    if (IsX509TokenRequirement(requirement))
                    {
                        if (IsForConnectionValidator(requirement))
                        {
                            SecurityTokenProvider result = null;
                            if (this.ssc != null)
                            {
                                result = new X509SecurityTokenProvider(this.ssc.GetX509Certificate());
                            }
                            else
                            {
                                if (this.delegateManager != null)
                                {
                                    requirement.Properties[SecurityTokenRequirement.PeerAuthenticationMode] = SecurityMode.Transport;
                                    requirement.TransportScheme = PeerStrings.Scheme;
                                    result = delegateManager.CreateSecurityTokenProvider(tokenRequirement);
                                }
                                else
                                {
                                    if (this.credential.Certificate != null)
                                    {
                                        result = new X509SecurityTokenProvider(this.credential.Certificate);
                                    }
                                }
                            }
                            if (result == null && mode == PeerAuthenticationMode.Password)
                            {
                                this.ssc = parent.GetCertificate();
                                result   = new X509SecurityTokenProvider(this.ssc.GetX509Certificate());
                            }

                            return(result);
                        }
                        else
                        {
                            X509CertificateValidator validator;
                            if (this.delegateManager != null)
                            {
                                requirement.TransportScheme = PeerStrings.Scheme;
                                requirement.Properties[SecurityTokenRequirement.PeerAuthenticationMode] = SecurityMode.Message;
                                return(delegateManager.CreateSecurityTokenProvider(tokenRequirement));
                            }
                            if (!this.credential.MessageSenderAuthentication.TryGetCertificateValidator(out validator))
                            {
                                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("TokenType");
                            }
                            return(new PeerX509TokenProvider(validator, this.credential.Certificate));
                        }
                    }
                    else if (IsPasswordTokenRequirement(requirement))
                    {
                        return(GetPasswordTokenProvider());
                    }
                    else
                    {
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("TokenType");
                    }
                }
                else
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("tokenRequirement");
                }
            }