2013-10-01 168 views
1

我正在为WebApiSecurity使用Thinktecture.IdentityModel 4.0样本。我修改了AdfsSamlClient以使用我们的ADFS服务器。未授权的呼叫 - 我用Thinktecture.Identity SAML令牌未授权

 var channel = factory.CreateChannel(); 
     var token = channel.Issue(rst) as GenericXmlSecurityToken; 

然后我尽量使服务呼叫

 var client = new HttpClient { BaseAddress = _baseAddress }; 
     client.DefaultRequestHeaders.Authorization = 
      new AuthenticationHeaderValue("AdfsSaml", saml); 

     var response = client.GetAsync("identity").Result; 

,并获得401是能够从出ADFS服务器获取SAML令牌。

我不知道如何调试。我追踪了Microsoft.IdentityModel,但它只是信息级别的跟踪,没有错误或警告,也没有任何我可以用来调试。

服务跟踪有趣的部分:

1. 
Description OnEndRequest is redirection to IdentityProvider '/WebHost/api/identity' 

2. 
Description CreateSignInRequest 
BaseUri  https://[ADFS...]/adfs/ls/ 
wa   wsignin1.0 
wtrealm  https://[WorkStation...]/WebHost/ 
wctx  rm=0&id=passive&ru=%2fWebHost%2fapi%2fidentity 

3. 
Description Redirecting to IdentityProvider: 'https://[ADFS...]/adfs/ls/?wa=wsignin1.0&wtrealm=https%3a%2f%2f[WorkStation...]%2fWebHost%2f&wctx=rm%3d0%26id%3dpassive%26ru%3d%252fWebHost%252fapi%252fidentity&wct=2013-09-30T17%3a35%3a04Z' 

感谢任何见解。

回答

0

想到的主要问题是确保服务器知道如何处理您正在使用的“AdfsSaml”方案,因此您需要确保映射对您的令牌处理程序正确无误。

我试过的一件事是创建我自己的令牌处理程序,并将其映射为标头的令牌处理程序。如果你愿意,你可以从Thinktecture自己的HttpSamlSecurityTokenHandler开始,并通过它进行调试。很显然,如果它从未击中过它,那么你在某处就会遇到映射问题。

我还发现,如果在ClaimsAuthenticationManager中引发异常,它会报告为未经授权 - 即使抛出的异常是完全不相关的东西(在我的情况下为InvalidCastException)。这难倒了我一段时间,因为我没有意识到身份验证已经到位,并且验证令牌实际上已经成功 - 我只是检查HTTP响应,它一直说未经授权 - 所以请确保您不会被任何微不足道的东西所误导。