1

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

 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

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

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

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