2016-11-21 1 views
5

Ich versuche, eine neue Authentifizierungsmethode mit Azure ACS hinzuzufügen, um Benutzer von einem ADFS zu unterstützen, aber ich habe ein sehr spezifisches Problem.Ws-Federation-Authentifizierung in MVC keine Claims-Informationen nach SAML2.0-Verifizierung

Ich bin in der Lage, die SAML2.0 mit folgenden Konfiguration zu überprüfen:

var audienceRestriction = new AudienceRestriction(AudienceUriMode.Never); 
var issuerRegistry = new ConfigurationBasedIssuerNameRegistry(); 
issuerRegistry.AddTrustedIssuer("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "https://XXXX.accesscontrol.windows.net/"); 
app.UseWsFederationAuthentication(new WsFederationAuthenticationOptions 
{ 
    MetadataAddress = "https://XXXXX.accesscontrol.windows.net/federationmetadata/2007-06/federationmetadata.xml", 
    Wtrealm = "http://someurl/", 
    SecurityTokenHandlers = new SecurityTokenHandlerCollection 
    { 
     new EncryptedSecurityTokenHandlerEx(new X509CertificateStoreTokenResolver(StoreName.My,StoreLocation.LocalMachine)), 
     new SamlSecurityTokenHandlerEx 
     { 
      CertificateValidator = X509CertificateValidator.None, 
      Configuration = new SecurityTokenHandlerConfiguration() 
      { 
       IssuerNameRegistry = issuerRegistry, 
       AudienceRestriction = audienceRestriction 
      } 
     } 
    }, 
}); 

Mit dem Handler wie folgt umgesetzt:

public class SamlSecurityTokenHandlerEx : Saml2SecurityTokenHandler, ISecurityTokenValidator 
{ 
    public override bool CanReadToken(string securityToken) 
    { 
     return base.CanReadToken(XmlReader.Create(new StringReader(securityToken))); 
    } 

    public ClaimsPrincipal ValidateToken(string securityToken, TokenValidationParameters validationParameters, 
     out SecurityToken validatedToken) 
    { 
     validatedToken = ReadToken(new XmlTextReader(new StringReader(securityToken)), Configuration.ServiceTokenResolver); 
     var claims = new ClaimsPrincipal(ValidateToken(validatedToken)); 

     return claims; 
    } 

    public int MaximumTokenSizeInBytes { get; set; } 
} 

Wenn ich die Ansprüche in den ValidateToken inspiziere es ist authentifiziert und mit den Ansprüchen, die ich will, aber nach dem Aufruf der Callback-Seite (wo ich eine neue ordnungsgemäße Anmeldung für die Webapp erstellen möchte) Es hat keine Informationen mehr über die Federated Auth.

Antwort