Thinktecture.Identity SAML 令牌未经授权



我正在使用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.说明 创建登录请求BaseUri https://[ADFS...]/ADFS/ls/wa wsignin1.0wtrealm https://[工作站...]/虚拟主机/wctx rm=0&id=passive&ru=%2fWebHost%2fapi%2fidentity3.重定向到标识提供者的说明: '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'

感谢您的任何见解。

我想到

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

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

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

最新更新