Токен Thinktecture.Identity SAML неавторизован

Я использую образцы Thinktecture.IdentityModel 4.0 для WebApiSecurity. Я изменил AdfsSamlClient для использования нашего сервера ADFS. Я могу получить токен SAML с сервера ADFS, используя

        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'

Спасибо за любое понимание.


person beezler    schedule 01.10.2013    source источник


Ответы (1)


Главное, что приходит на ум, это убедиться, что сервер знает, как обрабатывать используемую вами схему «AdfsSaml», поэтому вам нужно убедиться, что ваше сопоставление правильно для вашего обработчика токенов.

Я попытался создать свой собственный обработчик токенов и сопоставить его с обработчиком токенов для заголовка. Если вы хотите, вы можете начать с собственного HttpSamlSecurityTokenHandler от Thinktecture и отлаживать его. Очевидно, что если он никогда не попадает в цель, то у вас где-то проблема с отображением.

Я также обнаружил, что если в ClaimsAuthenticationManager было выдано исключение, оно будет сообщено как несанкционированное, даже если выброшенное исключение было чем-то совершенно не связанным (в моем случае InvalidCastException). Это поставило меня в тупик на некоторое время, потому что я не осознавал, что аутентификация зашла так далеко по конвейеру и что проверка токена на самом деле прошла успешно — я просто проверял ответ HTTP, который продолжал говорить о неавторизованном — так что убедитесь, что вы вас не вводят в заблуждение такие тривиальные вещи.

person dark_perfect    schedule 22.11.2013