代码之家  ›  专栏  ›  技术社区  ›  Ogglas

system.security.claims.claimsprincipal.current(和httpcontext.current.user)具有不同的声明,请求完全相同,具体取决于调用方

  •  0
  • Ogglas  · 技术社区  · 7 年前

    这是我以前从未见过的。当从两个不同的应用程序对ASP.NET Web API 2执行相同的请求时,我得到了不同的响应。我把范围缩小到 claimsprincipal.current being the criminator.

    var principal=claimsprincipal.current;
    
    if(principal==null)返回false;
    
    如果(!)principal.identity.isauthenticated)返回false;
    < /代码> 
    
    

    根据msdnclaimsprincipal.current,我仍然不理解这是如何发生的。

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

    然后,我尝试使用system.web.httpcontext.current.user来代替,但这给出了相同的结果。

    在这种情况下,来自同一台计算机的两个相同的HTTP请求如何生成不同的响应?可以使用相同的结果反复发送请求。我甚至可以停止应用程序和IIS Express,重新启动它,结果是相同的。这里发生了什么?它必须是存储在服务器上的某种会话,但我不明白为什么值与相同的请求不同。请求本身没有拼写错误,我可以复制由邮差生成的请求,它与burp一起工作,如果通过邮差发送,它将失败。。我也不认为这是邮递员指定的。我使用命令copy as powershellfromchrome developer tools->network tabfrom a working request and I get the same result withinvoke webrequest

    IIS使用匿名身份验证。应用程序使用iappbuilder-app.usecookieauthenticationwithauthenticationtype=defaultauthenticationtypes.applicationcookieand a customcookiename

    对于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_tsqqqqqqqqqsp-rzp2jgoz85y6w2glfkffxaxjbmtjjjjz4u1vjul5 qmeu2pqzkgosbp8xicfa01y1zzhkxnkl8miqdna9urqn2w-gmwje9bzfakft3eyjcttrcrgmrocgq;u请求验证token=hoa5 v8aihqp3fkkmuy336d7jydqwmswi-vvthqgmrvvvvvvvvvvvvvvfkffffffxxxxxjjbmtmjjjjzzzqxxxxxxJTFSJHGVSRAB6E3TLMPJC1
    < /代码> 
    
    

    以utf-8表示的burp cookie值:

    XXX=_1gQcJZ_zwNNS6f5OO0mD5y4pPHATpzw7uRHQZnZidNfYYec9S3MkR-d9aaxx1AilQSCK_h1-9LVS1uVM_JLJDTty5Nilsx4njjOCsrefgBOvnkt9CIzt_fGu0kzgsi_VbrCSO-txXtLhrOBT61bFskQd0i2yF_xrnqdOoW6yzKmUPrdomxiABMsC-NYw5aSGD9d81ht-oreUGqJKoDQ7EJ0BzUc-Y6BDqrJv5TrIfdgwgOsk2cFN9gfrlN9DQQQpRAAEv5mgiXDmMpUpNvsP-k-CFu69sl1ZlTXOLR5ECSrq7woeIhea6-L9g1mwpslqAV_saLtv0DcbR525GR0TSRPEiUhLwj_tsqqqqqqqqqsp-rzp2jgoz85y6w2glfkffxaxjbmtjjjjz4u1vjul5 qmeu2pqzkgosbp8xicfa01y1zzhkxnkl8miqdna9urqn2w-gmwje9bzfakft3eyjcttrcrgmrocgq;u请求验证token=hoa5 v8aihqp3fkkmuy336d7jydqwmswi-vvthqgmrvvvvvvvvvvvvvvfkffffffxxxxxjjbmtmjjjjzzzqxxxxxxJTFSJHGVSRAB6E3TLMPJC1
    < /代码> 
    
    

    更新2:

    从命令copy as powershell.fromchrome developer tools->network tab.

    invoke webrequest-uri“https://localhost:44349/api/crud/customer”-headers@“path”=“/api/crud/custo
    mer”;“pragma”=“无缓存”;“cookie”=“uu requestVerificationToken=3gvrynl8srhi5cbg-umg5egi3yuorhjaqq7jmxhn_hok0egs2xdiis
    afhbbzus3jccjdp6v60k_crzcqf71aw2totf9cutphehbmtnbrm1;io=iki1jghnuzwahlubaaaj;xxx=sudlupzynbxjbhpxj4ky6-gc31hhypn_iz88
    zsxhxipqzro6t_c5-m8bc_s2xev5sinoi-0316o7itb6dsra5b5oyjx2mxiwd2iamwgadqazeldloeqho6b6a8dq-j2yki17i4cjq7sqkbiucwn3dizcky8
    hhnwqf6lgvr79nwg3r1pqi62s3ukgexojftpea3fd3clpti4sgh88pwnxa5ypggdjuolcqjkusylplawz3jc8k4y-k_wna-3ex_nnychp3tk8omxhq1lgvq
    J3esqdnvell2kcwvucn3ni7ktst0vzl6g7vl3afzhdqb41bn90l4har9ugvloqskz_cu5iiiihzvsfrps6qj3hj8d-dcb4a2sovjnozh7sszxnz-hpphv2uaw
    anvi6msd4kwvbrejro9nlmobrbxhzeinol0baqkn_nhetxqandzhihcbuopfz8xgmgv-iltxzranj8zawd3yhregjsodvg”;“接受编码”=“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,类似gecko)chrome/70.0.3538.102 safari/537.36”;“accept”=“*/*”;“cache control”=“否”
    -cache”;“authority”=“本地主机:44349”;“referer”=“https://localhost:44349/”;“scheme”=“https”;“xsrf token”=“_ghozagvro
    fbayommt7uezk44wfksglscub-bvoermtpysps_d2uccvpyvpdwdf7srvfmnqm4jn1firyn-q35un5dcmew0eq6ov9m_4--i_klyejcxysodfi_waymdvlq
    cplrocvdnkWuhdozvyug2”;“method”=“获取”
    < /代码> <庞瑟。我把范围缩小到ClaimsPrincipal.Current是罪魁祸首。

    var principal = ClaimsPrincipal.Current;
    
    if (principal == null) return false;
    
    if (!principal.Identity.IsAuthenticated) return false;
    

    根据msdn索赔原则电流刚打电话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,重新启动它,结果是相同的。这里发生了什么?它一定是某种存储在服务器上的会话,但我不明白为什么值与相同的请求.请求本身没有拼写错误,我可以复制由邮递员生成的请求,它与Burp一起工作,如果通过邮递员发送,它将失败。.我也不认为这是邮递员指定的。我用了命令Copy as PowerShellChrome Developer Tools-gt;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

    更新:

    以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_saLtv0DcbR525gR0tSrpE本次会议的主要内容是:qqq1iphqqqsp-rzp2jgoz85y6w2glffkffxaxjbmtjoz4u1fjurl5 qeul5 qeupqzqkgosbp8xicffa01y1zzhkxnkl8miqdna9urqn2w-gmwje9bzfakft3eyyjcttrgmrocggq;请求验证token=hoa5v8aihqp3fkkmuy336d7jydqwmswi-vthqgmrvvvvvvvvzzlzlzmtjjjmtjjjjmgawxjjjjffffsvjjjjjjjgvvgv6E3TLMPJC1型
    

    更新2:

    从命令复制为PowerShellChrome 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 回复  |  直到 7 年前
        1
  •  1
  •   Ogglas    7 年前

    非常感谢@codecaster。有时你会觉得自己是个无足轻重的人。查看了 system.web.httpcontext.current.request.cookies 实际上这些是空的。将鼠标悬停在 postman中的cookie头上,然后我看到了值 restricted header(use postman interceptor) 。真正让我了解到的是 invoke webrequest in powershell got the same error code.

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

    ese是空的。悬停在cookie头上 Postman 然后我看到了价值 Restricted Header (use Postman Interceptor) . 我来这里的真正原因是 Invoke-WebRequest 在里面 Powershell 得到相同的错误代码。

    enter image description here

    升级到邮差原生应用程序,而不是使用Chrome应用程序,然后一切正常。

    enter image description here

    推荐文章