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; } } }
public Federation(Uri metadataUrl, bool allowUnsolicitedAuthnResponse) : this(MetadataLoader.LoadFederation(metadataUrl), allowUnsolicitedAuthnResponse) { }