System.Security.Claims.ClaimsPrincipal.Current (и HttpContext.Current.User) имеют разные претензии с точно таким же запросом в зависимости от вызывающей стороны - PullRequest
0 голосов
/ 15 ноября 2018

Это то, чего я никогда раньше не видел. При выполнении идентичного запроса к ASP.NET Web API 2 из двух разных приложений я получаю разные ответы. Я сузил это до ClaimsPrincipal.Current быть виновником.

var principal = ClaimsPrincipal.Current;

if (principal == null) return false;

if (!principal.Identity.IsAuthenticated) return false;

Согласно MSDN ClaimsPrincipal.Current просто звонит Thread.CurrentPrincipal по умолчанию, но я до сих пор не понимаю, как это может произойти.

https://docs.microsoft.com/en-us/aspnet/core/migration/claimsprincipal-current?view=aspnetcore-2.1

Затем я попытался использовать System.Web.HttpContext.Current.User, но это дает тот же результат.

Как два идентичных HTTP-запроса от одного компьютера могут генерировать разные ответы в этом случае? Запросы могут быть отправлены снова и снова с тем же результатом. Я даже могу остановить приложение и IIS Express, запустить его снова, и результат тот же. Что здесь происходит? Это должен быть какой-то сеанс, который хранится на сервере, но я не понимаю, почему значения отличаются с одинаковыми запросами . В самом запросе ничего не написано неправильно, я могу скопировать запрос, сгенерированный Postman, и он работает с BURP, если он отправляется через Postman, он не работает . Я не думаю, что это специфично для Почтальона. Я использовал команду Copy as PowerShell из Chrome Developer Tools -> Network tab из рабочего запроса и получил тот же результат с Invoke-WebRequest.

IIS использует Anonymous Authentication. Приложение использует IAppBuilder - app.UseCookieAuthentication с AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie и пользовательские CookieName.

С Burp запрос дает principal.Identity.IsAuthenticated = true

enter image description here

enter image description here

enter image description here

С почтальоном точно такой же запрос дает principal.Identity.IsAuthenticated = false. Почтальон Gui делает разрыв строки на -, но скопированное значение работает в Burp, так что ничего плохого нет

enter image description here

enter image description here

enter image description here

Обновление:

Значение файла cookie в формате UTF-8:

XXX=_1gQcJZ_zwNNS6f5OO0mD5y4pPHATpzw7uRHQZnZidNfYYec9S3MkR-d9aaxx1AilQSCK_h1-9LVS1uVM_JLJDTty5Nilsx4njjOCsrefgBOvnkt9CIzt_fGu0kzgsi_VbrCSO-txXtLhrOBT61bFskQd0i2yF_xrnqdOoW6yzKmUPrdomxiABMsC-NYw5aSGD9d81ht-oreUGqJKoDQ7EJ0BzUc-Y6BDqrJv5TrIfdgwgOsk2cFN9gfrlN9DQQQpRAAEv5mgiXDmMpUpNvsP-k-CFu69sl1ZlTXOLR5ECSrq7woeIhea6-L9g1mwpslqAV_saLtv0DcbR525gR0tSrpEIuHLwj_TSqTQ1IPHqfcqSP-RzP2jGoz85y6W2glFkfFxAXJBMTjoz4U1fvjURL5qMEuC2IpQZqKGoSbp8xICFA01yY1zzHKxXnKL8MIqDNAe9urQn2W-gmwje9bzFAkft3eYYjctrCrGMRocgQ; __RequestVerificationToken=HOA5v8aiHqUhzZP3fkKMUyi336D7JydqWMSWI-VThQgMrVRZEllKglaGaLOUP0z49ZEuJsrEaYbrLaLCxMgAwxJtfSJhGvsRaB6e3tlMPjc1

Значение куки BURP в UTF-8:

XXX=_1gQcJZ_zwNNS6f5OO0mD5y4pPHATpzw7uRHQZnZidNfYYec9S3MkR-d9aaxx1AilQSCK_h1-9LVS1uVM_JLJDTty5Nilsx4njjOCsrefgBOvnkt9CIzt_fGu0kzgsi_VbrCSO-txXtLhrOBT61bFskQd0i2yF_xrnqdOoW6yzKmUPrdomxiABMsC-NYw5aSGD9d81ht-oreUGqJKoDQ7EJ0BzUc-Y6BDqrJv5TrIfdgwgOsk2cFN9gfrlN9DQQQpRAAEv5mgiXDmMpUpNvsP-k-CFu69sl1ZlTXOLR5ECSrq7woeIhea6-L9g1mwpslqAV_saLtv0DcbR525gR0tSrpEIuHLwj_TSqTQ1IPHqfcqSP-RzP2jGoz85y6W2glFkfFxAXJBMTjoz4U1fvjURL5qMEuC2IpQZqKGoSbp8xICFA01yY1zzHKxXnKL8MIqDNAe9urQn2W-gmwje9bzFAkft3eYYjctrCrGMRocgQ; __RequestVerificationToken=HOA5v8aiHqUhzZP3fkKMUyi336D7JydqWMSWI-VThQgMrVRZEllKglaGaLOUP0z49ZEuJsrEaYbrLaLCxMgAwxJtfSJhGvsRaB6e3tlMPjc1

Обновление 2:

Из команды Copy as PowerShell из Chrome Developer Tools -> Network tab.

Invoke-WebRequest -Uri "https://localhost:44349/api/crud/customer" -Headers @{"path"="/api/crud/custo
mer"; "pragma"="no-cache"; "cookie"="__RequestVerificationToken=3gvrynl8SRhi5CBG-umg5eGii3yUOrHJAQQ7jMXhN_hOk0EGS2XdIDIS
afhbBZuS3JCCJdP6V60K_crzcQF71aw2totf9CUTPheHBmTNBRM1; io=iki1JghnuzWahlUBAAAJ; XXX=SUdlUpzYNbXJbhPxj4KY6-GC31hHyyPN_IZ88
zsXHXIpqzro6t_C5-m8BC_s2xev5SINoI-0316o7ITb6dsRA5b5oYJX2MXIWD2iaMWGADqAZeLDLoeQPHo6B6a8dQ-j2YkI17I4cjQ7SQKBiUCwN3DIZckY8
HHnWqF6LGVr79nWG3R1pqI62S3UKgEXOjhFTpEA3fD3clPti4ShG88PWnxa5ypGGDjUolcqjkusylpLAWZ3Jc8K4y-K_WnA-3EX_nNyCHp3Tk8omXHq1LgvQ
J3EsqdNvELL2KcwvUCn3ni7ktSt0Vzl6G7vL3AfZhDQb41bn90l4haR9UGvLOqSkZ_cu5IiHzvsFrps6QJ3HJ8d-Dcb4A2soVjnozh7SsZxnz-HppwhV2UaW
ANvi6MsD4kwvBreJrO9nLMOBRBXhzEInoL0baqkn_nhEtxqAndZHiHcbuoPfz8xGmgV-ilTxZRAnJ8ZAwD3yHREgJsodVg"; "accept-encoding"="gzip
, deflate, br"; "accept-language"="en-US,en;q=0.9,sv-SE;q=0.8,sv;q=0.7"; "user-agent"="Mozilla/5.0 (Windows NT 10.0; Win
64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36"; "accept"="*/*"; "cache-control"="no
-cache"; "authority"="localhost:44349"; "referer"="https://localhost:44349/"; "scheme"="https"; "xsrf-token"="_GHoZagVRo
FBIAyoMmT7UEZk44wfKsGlscub-bvoeRMTpysPS_d2uccvyyvPdWDf7srVfmNqM4JN1firyN-Q35UN5DCMew0eq6OV9M_4--i_klYEJcXYSodFi_wAymDVlQ
CPLroCvDNkwuhdoZvyug2"; "method"="GET"}

1 Ответ

0 голосов
/ 15 ноября 2018

Огромное спасибо @CodeCaster.Иногда вы чувствуете себя как n00b во всем.Посмотрел на System.Web.HttpContext.Current.Request.Cookies и действительно они были пустыми.Повис над заголовком Cookie в Postman, а затем я увидел значение Restricted Header (use Postman Interceptor).Что меня действительно здесь заставило, так это то, что Invoke-WebRequest в Powershell получил тот же код ошибки.

enter image description here

Обновлен до родного приложения Почтальона вместо использования приложения Chrome, после чего все заработало.

enter image description here

...