繁体   English   中英

System.Security.Claims.ClaimsPrincipal.Current(和HttpContext.Current.User)具有不同的声明,且完全相同的请求取决于调用者

[英]System.Security.Claims.ClaimsPrincipal.Current (and HttpContext.Current.User) has different claims with the exact same request depending on caller

这是我从未见过的东西。 当从两个不同的应用程序执行对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发送,则失败 我也不认为这是邮递员专用的。 我从工作请求中使用了Chrome Developer Tools -> Network tab的命令Copy as PowerShell ,并且与Invoke-WebRequest得到了相同的结果。

IIS使用Anonymous Authentication 该应用程序使用IAppBuilder - app.UseCookieAuthentication以及AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie和自定义CookieName

使用Burp时,请求给出principal.Identity.IsAuthenticated = true

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

使用Postman时,完全相同的请求给出了principal.Identity.IsAuthenticated = false 邮递员Gui进行了换行-但复制的值在Burp中有效,因此那里没有错。

在此处输入图片说明

在此处输入图片说明

在此处输入图片说明

更新:

UTF-8中的邮递员cookie值:

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

UTF-8中的BURP Cookie值:

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:

Chrome Developer Tools -> Network tab ,命令Copy as PowerShell

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"}

非常感谢@CodeCaster。 有时您会感觉像n00b一样。 看了一下System.Web.HttpContext.Current.Request.Cookies ,实际上它们是空的。 将鼠标悬停在Postman的Cookie标头上,然后看到值Restricted Header (use Postman Interceptor) 真正使我到这里的是Powershell中的Invoke-WebRequest得到了相同的错误代码。

在此处输入图片说明

升级到Postman本地应用程序,而不是使用Chrome应用程序,然后一切正常。

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM