2016-05-17 7 views
3

En ce moment je travaille sur un projet où mon application doit valider avec ADFS pour se connecter.ID3242: Le jeton de sécurité n'a pas pu être authentifié ou autorisé

J'ai trouvé du code pour obtenir le jeton d'ADFS mais il continue à me donner l'erreur ci-dessus sans bonne description de l'erreur.

C'est le code que j'utilise:

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(); 
    } 
    } 
} 

Une erreur se produit sur la ligne avec le commentaire d'erreur.

Quelqu'un a une idée?

Répondre

0

Vérifiez que votre point de distribution CRL peut être atteint.

J'ai rencontré ce problème dans certaines applications Web ADFS Single SignOn. ADFS utilise des certificats PKI (par exemple pour la signature des jetons). Ces certificats ont souvent une CRL (Certificate Revocation List) qui doit être accessible. Si la liste de révocation ne peut pas être vérifiée, vous avez tendance à avoir le message d'erreur ci-dessus. Pour moi, c'était un pare-feu entre mon application et le serveur CDP (CRL Distribution Point).

PS. Vous pouvez vérifier le CDP en consultant les détails du certificat lui-même.