2013-01-18 11 views
6

Abbiamo un'applicazione originariamente costruita con .NET 4.0 e WIF 3.5 (1.0?). Sono in procinto di convertirlo per utilizzare WIF 4.5 in quanto abbiamo aggiornato l'app a .NET 4.5. Ho apportato tutte le modifiche al codice e ho combattuto con le impostazioni di configurazione. Il mio attuale dilemma è con l'elemento <claimTypeRequired>. Secondo this documentation dovrebbe essere un figlio di <identityConfiguration>, ma quando modifico il mio config per assomigliare a questoConfigurazione di Windows Identity Foundation 4.5

<system.identityModel> 
    <identityConfiguration> 
    <claimTypeRequired> 
     ... 
    </claimTypeRequired> 

ottengo il seguente errore in fase di esecuzione

Parser Error Message: Unrecognized element 'claimTypeRequired'. 

Se ho appena commento out the <claimTypeRequired> block Ho superato quell'errore ma poi mi viene presentato un altro problema. Avevamo modificato il maximumClockSkew nell'applicazione esistente tramite la seguente configurazione

<securityTokenHandlerConfiguration> 
    <maximumClockSkew value="1" /> 
</securityTokenHandlerConfiguration> 

La documentazione di configurazione si fa riferimento in precedenza non ha nemmeno parlare della maximumClockSkew. Ho pensato di provare a lasciarlo per vedere cosa succede. Quello che succede è

Parser Error Message: Property 'maximumClockSkew' is not a ConfigurationElement. 

Ma quando guardo la classe SecurityTokenHandlerConfigurationElement utilizzando JustDecompile posso vedere la proprietà:

[ConfigurationProperty("maximumClockSkew", IsRequired=false, DefaultValue="00:05:00")] 
[IdentityModelTimeSpanValidator(MinValueString="00:00:00")] 
[TypeConverter(typeof(TimeSpanOrInfiniteConverter))] 
public TimeSpan MaximumClockSkew... 

così sembra come se fosse in attesa di essere lì.

È quasi come se Microsoft non volesse che usassimo questa roba.

risposta

0

si erano quasi vicino questa è la risposta per l'impostazione in config

<securityTokenHandlerConfiguration saveBootstrapContext="true" maximumClockSkew="00:35:00" > 

Funziona imposta al valore di 35 minuti qui. hh: mm: ss

4

Ecco una decompilazione di IdentityConfigurationElement dal resharper. Noterai che il claimtyperequired non è più un membro di questo elemento. Sembra che claimTypeRequired non faccia parte dello schema, nonostante sia nella documentazione di Microsoft.

// Type: System.IdentityModel.Configuration.IdentityConfigurationElement 
// Assembly: System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 
// Assembly location: C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.IdentityModel.dll 

using System; 
using System.ComponentModel; 
using System.Configuration; 
using System.Runtime; 

namespace System.IdentityModel.Configuration 
{ 
    /// <summary> 
    /// Represents an &lt;identityConfiguration&gt; element in a configuration file. This class cannot be inherited. 
    /// </summary> 
    public sealed class IdentityConfigurationElement : ConfigurationElement 
    { 
    /// <summary> 
    /// Initializes a new instance of the <see cref="T:System.IdentityModel.Configuration.IdentityConfigurationElement"/> class. 
    /// </summary> 
    [TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")] 
    public IdentityConfigurationElement(); 
    /// <summary> 
    /// Gets or sets the name of the identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The name of the identity configuration. 
    /// </returns> 
    [ConfigurationProperty("name", Options = ConfigurationPropertyOptions.IsKey)] 
    [StringValidator(MinLength = 0)] 
    public string Name { get; set; } 
    /// <summary> 
    /// Gets the <see cref="T:System.IdentityModel.Configuration.AudienceUriElementCollection"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The collection of audience URIs that are configured for this identity configuration element. 
    /// </returns> 
    [ConfigurationProperty("audienceUris", IsRequired = false)] 
    public AudienceUriElementCollection AudienceUris { get; } 
    /// <summary> 
    /// Gets or sets the <see cref="T:System.IdentityModel.Configuration.IdentityModelCachesElement"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The element that configures the token replay cache and the session security token cache for this identity configuration element. 
    /// </returns> 
    [ConfigurationProperty("caches", IsRequired = false)] 
    public IdentityModelCachesElement Caches { get; set; } 
    /// <summary> 
    /// Gets or sets the <see cref="T:System.IdentityModel.Configuration.X509CertificateValidationElement"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The element that configures the certificate validator and its properties for this identity configuration element. 
    /// </returns> 
    [ConfigurationProperty("certificateValidation", IsRequired = false)] 
    public X509CertificateValidationElement CertificateValidation { get; set; } 
    /// <summary> 
    /// Gets or sets the claims authentication manager that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// A custom type element that specifies the <see cref="T:System.Type"/> of the claims authentication manager. The type must derive from <see cref="T:System.Security.Claims.ClaimsAuthenticationManager"/>. 
    /// </returns> 
    [ConfigurationProperty("claimsAuthenticationManager", IsRequired = false)] 
    public CustomTypeElement ClaimsAuthenticationManager { get; set; } 
    /// <summary> 
    /// Gets or sets the claims authorization manager that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// A custom type element that specifies the <see cref="T:System.Type"/> of the claims authorization manager. The type must derive from <see cref="T:System.Security.Claims.ClaimsAuthorizationManager"/>. 
    /// </returns> 
    [ConfigurationProperty("claimsAuthorizationManager", IsRequired = false)] 
    public CustomTypeElement ClaimsAuthorizationManager { get; set; } 
    /// <summary> 
    /// Gets or sets the <see cref="T:System.IdentityModel.Configuration.IssuerNameRegistryElement"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The element that configures the issuer name registry for this identity configuration element. 
    /// </returns> 
    [ConfigurationProperty("issuerNameRegistry", IsRequired = false)] 
    public IssuerNameRegistryElement IssuerNameRegistry { get; set; } 
    /// <summary> 
    /// Gets or sets the issuer token resolver that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// A custom type element that specifies the <see cref="T:System.Type"/> of the issuer token resolver. The type must derive from <see cref="T:System.IdentityModel.Selectors.SecurityTokenResolver"/>. 
    /// </returns> 
    [ConfigurationProperty("issuerTokenResolver", IsRequired = false)] 
    public CustomTypeElement IssuerTokenResolver { get; set; } 
    /// <summary> 
    /// Gets or sets the maximum clock skew that is configured for this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The maximum clock skew. 
    /// </returns> 
    [TypeConverter(typeof (TimeSpanOrInfiniteConverter))] 
    [ConfigurationProperty("maximumClockSkew", DefaultValue = "00:05:00", IsRequired = false)] 
    [IdentityModelTimeSpanValidator(MinValueString = "00:00:00")] 
    public TimeSpan MaximumClockSkew { get; set; } 
    /// <summary> 
    /// Gets or sets a value that indicates whether to save the bootstrap context in claims identities and session security tokens created by the handlers configured in this identity collection. 
    /// </summary> 
    /// 
    /// <returns> 
    /// true to save the <see cref="T:System.IdentityModel.Tokens.BootstrapContext"/>; otherwise, false. 
    /// </returns> 
    [ConfigurationProperty("saveBootstrapContext", DefaultValue = false, IsRequired = false)] 
    public bool SaveBootstrapContext { get; set; } 
    /// <summary> 
    /// Gets or sets the service token resolver that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// A custom type element that specifies the <see cref="T:System.Type"/> of the service token resolver. The type must derive from <see cref="T:System.IdentityModel.Selectors.SecurityTokenResolver"/>. 
    /// </returns> 
    [ConfigurationProperty("serviceTokenResolver", IsRequired = false)] 
    public CustomTypeElement ServiceTokenResolver { get; set; } 
    /// <summary> 
    /// Gets or sets the <see cref="T:System.IdentityModel.Configuration.TokenReplayDetectionElement"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The element that specifies whether token replay detection is enabled and specifies the maximum expiration period for tokens in the token replay cache. 
    /// </returns> 
    [ConfigurationProperty("tokenReplayDetection", IsRequired = false)] 
    public TokenReplayDetectionElement TokenReplayDetection { get; set; } 
    /// <summary> 
    /// Gets or sets the <see cref="T:System.IdentityModel.Configuration.SecurityTokenHandlerSetElementCollection"/> that is associated with this identity configuration element. 
    /// </summary> 
    /// 
    /// <returns> 
    /// The security token handler collections configured for this identity configuration element.. 
    /// </returns> 
    [ConfigurationProperty("", Options = ConfigurationPropertyOptions.IsDefaultCollection)] 
    public SecurityTokenHandlerSetElementCollection SecurityTokenHandlerSets { get; } 
    } 
} 
+0

È fantastico. In System.IdentityModel.Services.Serialization.ConfigurationConstants hanno ancora una costante per questo, e la classe interna esiste ancora per rappresentarlo (System.IdentityModel.Services.Serialization.ClaimTypeRequiredElement). Non ha importanza, è stata meno preoccupante di MaximumClockSkew, che abbiamo finito per aggirare impostandolo a livello di programmazione. –

+0

puoi provare l'opzione sotto Craig W.Lo rende configurabile e senza hard coding –

2

A proposito, se non avete scoperto già circa l'attributo claimTypeRequired in XML, è possibile utilizzare questo come una soluzione alternativa:

nella parte superiore del file di configurazione, messo questo:

<section name="system.identityModel.services.serialization" type="System.IdentityModel.Services.Serialization , System.IdentityModel.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/> 

e poi intorno alla claimTypeRequired, ecco un esempio: saluti

<system.identityModel.services.serialization> 
     <claimTypeRequired> 
      <claimType type="http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name" optional="true"/> 
      <claimType type="http://schemas.microsoft.com/ws/2008/06/identity/claims/role" optional="true"/> 
     </claimTypeRequired> 
    </system.identityModel.services.serialization> 

saluti,

Problemi correlati