1

我正在为 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.
说明 OnEndRequest 被重定向到 IdentityProvider '/WebHost/api/identity'

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

3.
重定向到 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'

感谢您的任何见解。

4

1 回答 1

0

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

我尝试的一件事是创建自己的令牌处理程序,并将其映射为标头的令牌处理程序。如果需要,您可以从 Thinktecture 自己的 HttpSamlSecurityTokenHandler 开始,并通过它进行调试。显然,如果它从未命中它,那么你在某个地方遇到了映射问题。

我还发现,如果在 ClaimsAuthenticationManager 中抛出异常,它会报告为未经授权——即使抛出的异常是完全不相关的(在我的例子中是 InvalidCastException)。这让我难了一阵子,因为我没有意识到身份验证已经深入到管道中,并且令牌的验证实际上已经成功 - 我只是在检查 HTTP 响应,它一直说未经授权 - 所以请确保你'不会被这样的小事误导。

于 2013-11-22T19:56:56.423 回答