2016-05-17 48 views
3

Im Moment arbeite ich an einem Projekt, bei dem meine Anwendung mit ADFS validiert werden muss, um sich anzumelden.ID3242: Das Sicherheitstoken konnte nicht authentifiziert oder autorisiert werden

Ich habe Code gefunden, um das Token von ADFS zu erhalten, aber es gibt mir den Fehler oben ohne eine gute Beschreibung des Fehlers.

Dies ist der Code, den ich verwenden:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.ServiceModel; 
using System.ServiceModel.Security; 
using System.Net; 
using System.IdentityModel.Protocols.WSTrust; 
using System.IdentityModel.Tokens; 

namespace ADFS_token_test_3 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     go(); 
    } 

    static public EndpointAddress ep; 
    static public WSTrustChannelFactory factory; 

    public static string go() 
    { 
     WS2007HttpBinding binding = new WS2007HttpBinding(SecurityMode.TransportWithMessageCredential); 
     binding.Security.Message.EstablishSecurityContext = false; 
     binding.Security.Transport.ClientCredentialType = HttpClientCredentialType.None; 

     binding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; 
     ep = new EndpointAddress("https://companyname.nl/adfs/services/trust/13/usernamemixed"); 

     factory = new WSTrustChannelFactory(binding, ep); 
     factory.TrustVersion = TrustVersion.WSTrust13; 

     factory.Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 
     factory.Credentials.UserName.UserName = "username"; 
     factory.Credentials.UserName.Password = "password"; 

     var rst = new RequestSecurityToken 
     { 
      RequestType = RequestTypes.Issue, 
      AppliesTo = new EndpointReference("https://companyname.nl/adfs/services/trust/13/usernamemixedr"), 
      KeyType = KeyTypes.Bearer, 
     }; 

     IWSTrustChannelContract channel = factory.CreateChannel(); 
     // Error line 
     GenericXmlSecurityToken genericToken = channel.Issue(rst) 
     as GenericXmlSecurityToken; 

     return genericToken.TokenXml.InnerXml.ToString(); 
    } 
    } 
} 

Fehler auf der Linie mit dem Fehler Kommentar auftritt.

Jeder hat eine Ahnung?

Antwort

0

Überprüfen Sie, ob Ihr CRL-Verteilungspunkt erreicht werden kann.

Ich habe dieses Problem in einigen der ADFS Single SignOn Web-Anwendungen festgestellt. ADFS verwendet PKI-Zertifikate (z. B. zum Signieren der Tokens). Diese Zertifikate haben oft eine CRL (Certificate Revocation List), die erreichbar sein muss. Wenn die Sperrliste nicht überprüft werden kann, neigen Sie dazu, die obige Fehlermeldung zu erhalten. Für mich war es eine Firewall, die zwischen meiner Anwendung und dem CDP (CRL Distribution Point) Server stand.

PS. Sie können den CDP überprüfen, wenn Sie sich die Details des Zertifikats selbst ansehen.