2016-05-17 227 views
3

目前我正在開發一個項目,其中我的應用程序必須使用ADFS進行驗證才能登錄。ID3242:無法對安全令牌進行身份驗證或授權

我發現了一些代碼來從ADFS獲取令牌,但它不斷給我上面的錯誤,沒有任何關於錯誤的良好描述。

這是我使用的代碼:與錯誤註釋的行發生

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

錯誤。

任何人都有線索?

回答

0

檢查您的CRL分銷點是否可以到達。

我在某些ADFS Single SignOn Web應用程序中遇到過這個問題。 ADFS使用PKI證書(例如用於簽署令牌)。這些證書通常具有必須可以訪問的CRL(證書吊銷列表)。如果無法檢查吊銷列表,您往往會收到上述錯誤消息。 對我來說,這是一個位於我的應用程序和CDP(CRL分發點)服務器之間的防火牆。

PS。您可以在查看證書本身的詳細信息時驗證CDP。