c# - System.Security.Claims.ClaimsPrincipal.Current(和 HttpContext.Current.User)根据调用者的不同,具有完全相同的请求的不同声明
问题描述
这是我以前从未见过的。当从两个不同的应用程序对 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,再次启动它,结果是一样的。这里发生了什么?它必须是存储在服务器上的某种会话,但我不明白为什么值与相同的 requests不同。请求本身没有拼写错误,我可以复制 Postman 生成的请求,它可以与 BURP 一起使用,如果它是通过 Postman 发送的,它会失败。我也不认为它是 Postman 特有的。我使用Copy as PowerShell
来自Chrome Developer Tools
->Network tab
来自工作请求的命令,我得到了相同的结果Invoke-WebRequest
。
IIS 使用Anonymous Authentication
. 该应用程序使用IAppBuilder - app.UseCookieAuthentication
withAuthenticationType = DefaultAuthenticationTypes.ApplicationCookie
和自定义CookieName
.
使用 Burp,请求给出principal.Identity.IsAuthenticated = true
使用 Postman 的请求完全相同principal.Identity.IsAuthenticated = false
。Postman 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:
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"}
解决方案
推荐阅读
- java - 它们是 java 根包中的任何类/类吗
- dart - Flutter 系统导航栏和状态栏颜色
- vba - 无法以有效的方式切换到新标签
- c++ - DXGI 截屏图像失真
- ruby - Ruby正则表达式提取2个标签之间的内容
- mongodb - 我们什么时候应该在 MongoDB 中使用嵌入式文档?
- javascript - 烧瓶 request.get_json() 没有收到来自 $.post() 请求的任何内容
- security - Lua redis 传输中加密连接
- scala - 有没有比 asOpt 更好的方法将 json 转换为模型
- javascript - 如果 jquery 或 javascript 中的第一个字符不是 #,则阻止所有字符和符号