Esempio n. 1
0
        public void GetDelegateForIdpDescriptors_entities_descriptor_metadata_Test()
        {
            //ARRANGE
            var metadata = EntityDescriptorProviderMock.GetEntitiesDescriptor();
            var handler  = new MetadataEntitiesDescriptorHandler();
            //ACT
            var del  = IdpMetadataHandlerFactory.GetDelegateForIdpDescriptors(typeof(EntitiesDescriptor), typeof(IdentityProviderSingleSignOnDescriptor));
            var idps = del(handler, metadata)
                       .ToList();

            //ASSERT
            Assert.AreEqual(1, idps.Count);
        }
Esempio n. 2
0
        public static void OnReceived(MetadataBase metadata, IDependencyResolver dependencyResolver)
        {
            if (metadata == null)
            {
                throw new ArgumentNullException("metadata");
            }

            if (dependencyResolver == null)
            {
                throw new ArgumentNullException("dependencyResolver");
            }

            string entityId    = "RegisteredIssuer";
            var    handlerType = typeof(IMetadataHandler <>).MakeGenericType(metadata.GetType());
            var    handler     = dependencyResolver.Resolve(handlerType);

            var del  = IdpMetadataHandlerFactory.GetDelegateForIdpDescriptors(metadata.GetType(), typeof(IdentityProviderSingleSignOnDescriptor));
            var idps = del(handler, metadata).Cast <IdentityProviderSingleSignOnDescriptor>();

            var identityRegister = SecurityTokenHandlerConfiguration.DefaultIssuerNameRegistry as ConfigurationBasedIssuerNameRegistry;

            if (identityRegister == null)
            {
                return;
            }

            var register = idps.SelectMany(x => x.Keys.SelectMany(y => y.KeyInfo.Select(cl =>
            {
                var binaryClause = cl as BinaryKeyIdentifierClause;
                if (binaryClause == null)
                {
                    throw new InvalidOperationException(String.Format("Expected type: {0} but it was: {1}", typeof(BinaryKeyIdentifierClause), cl.GetType()));
                }

                var certContent = binaryClause.GetBuffer();
                var cert        = new X509Certificate2(certContent);
                return(cert);
            }))).Aggregate(identityRegister, (t, next) =>
            {
                if (!identityRegister.ConfiguredTrustedIssuers.Keys.Contains(next.Thumbprint))
                {
                    identityRegister.AddTrustedIssuer(next.Thumbprint, entityId);
                }
                return(t);
            });
        }
Esempio n. 3
0
        protected override async Task ApplyResponseChallengeAsync()
        {
            if (this.Response.StatusCode != 401)
            {
                return;
            }

            var challenge = this.Helper.LookupChallenge(this.Options.AuthenticationType, this.Options.AuthenticationMode);

            if (challenge == null)
            {
                return;
            }

            if (!this.Options.SSOPath.HasValue || base.Request.Path != this.Options.SSOPath)
            {
                return;
            }

            var federationPartyId = FederationPartyIdentifierHelper.GetFederationPartyIdFromRequestOrDefault(Request.Context);

            if (this._configuration == null)
            {
                var configurationManager = this._resolver.Resolve <IConfigurationManager <MetadataBase> >();
                this._configuration = await configurationManager.GetConfigurationAsync(federationPartyId, new System.Threading.CancellationToken());
            }

            Uri signInUrl    = null;
            var metadataType = this._configuration.GetType();
            var handlerType  = typeof(IMetadataHandler <>).MakeGenericType(metadataType);
            var handler      = this._resolver.Resolve(handlerType);

            //ToDo: sort this one in phase3 when implementing owin middleware.
            //no need to have two methods in the handler. use GetDelegateForIdpDescriptors
            var locationDel = IdpMetadataHandlerFactory.GetDelegateForIdpLocation(metadataType);

            signInUrl = locationDel(handler, this._configuration, new Uri(Bindings.Http_Redirect));

            //the lines below are likely to do all what we need.
            var idpDel = IdpMetadataHandlerFactory.GetDelegateForIdpDescriptors(this._configuration.GetType(), typeof(IdentityProviderSingleSignOnDescriptor));
            var idp    = idpDel(handler, this._configuration).Cast <IdentityProviderSingleSignOnDescriptor>().First();

            var federationPartyContextBuilder = this._resolver.Resolve <IFederationPartyContextBuilder>();
            var federationContext             = federationPartyContextBuilder.BuildContext(federationPartyId);

            var requestContext  = new AuthnRequestContext(signInUrl, federationContext, idp.NameIdentifierFormats);
            var protocolContext = new SamlProtocolContext
            {
                RequestContext = new HttpRedirectRequestContext
                {
                    BindingContext      = new HttpRedirectContext(requestContext),
                    RequestHanlerAction = redirectUri =>
                    {
                        this.Response.Redirect(redirectUri.AbsoluteUri);
                        return(Task.CompletedTask);
                    }
                }
            };
            var protocolFactory = this._resolver.Resolve <Func <string, IProtocolHandler> >();
            var protocolHanlder = protocolFactory(Bindings.Http_Redirect);
            await protocolHanlder.HandleRequest(protocolContext);
        }