Exemplo n.º 1
0
        private void LoadMetadata()
        {
            lock (metadataLoadLock)
            {
                try
                {
                    var metadata = MetadataLoader.LoadFederation(metadataUrl);

                    var identityProvidersMetadata = metadata.ChildEntities.Cast <ExtendedEntityDescriptor>()
                                                    .Where(ed => ed.RoleDescriptors.OfType <IdentityProviderSingleSignOnDescriptor>().Any());

                    var identityProviders = new List <IdentityProvider>();

                    foreach (var idpMetadata in identityProvidersMetadata)
                    {
                        var idp = new IdentityProvider(idpMetadata.EntityId, options.SPOptions)
                        {
                            AllowUnsolicitedAuthnResponse = allowUnsolicitedAuthnResponse
                        };

                        idp.ReadMetadata(idpMetadata);
                        identityProviders.Add(idp);
                    }

                    RegisterIdentityProviders(identityProviders);

                    MetadataValidUntil = metadata.CalculateMetadataValidUntil();

                    LastMetadataLoadException = null;
                }
                catch (WebException ex)
                {
                    var now = DateTime.UtcNow;

                    if (MetadataValidUntil < now)
                    {
                        // If download failed, ignore the error and trigger a scheduled reload.
                        RemoveAllRegisteredIdentityProviders();
                        MetadataValidUntil = DateTime.MinValue;
                    }
                    else
                    {
                        ScheduleMetadataReload();
                    }

                    LastMetadataLoadException = ex;
                }
            }
        }
Exemplo n.º 2
0
 public Federation(Uri metadataUrl, bool allowUnsolicitedAuthnResponse)
     : this(MetadataLoader.LoadFederation(metadataUrl), allowUnsolicitedAuthnResponse)
 {
 }