我正在为WebApiSecurity使用Thinktecture.IdentityModel 4.0示例。我已经修改了AdfsSamlClient以使用我们的ADFS服务器。我可以使用
从ADFS服务器获取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 - 未经授权的电话。
我不知道如何调试这个。我有跟踪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 :(得分:0)
要想到的主要事情是确保服务器知道如何处理您正在使用的“AdfsSaml”方案,因此您需要确保您的映射对您的令牌处理程序是正确的。
我尝试过的一件事是创建自己的令牌处理程序,并将其映射为标头的令牌处理程序。如果您愿意,可以从Thinktecture自己的HttpSamlSecurityTokenHandler开始,然后通过它调试。显然,如果它从未命中过,那么你在某个地方就会遇到映射问题。
我还发现如果在ClaimsAuthenticationManager中抛出异常,它会报告为未授权 - 即使被抛出的异常是完全不相关的东西(在我的例子中,是InvalidCastException)。这让我感到困惑了一段时间,因为我还没有意识到身份验证到目前为止已经进入管道并且令牌的验证实际上已经成功 - 我只是检查HTTP响应,它一直在说未经授权 - 所以请确保你不要被那种微不足道的事情误导。