關於 IdentityServer4 在最新版 Chrome 上登錄失敗的問題


問題描述

公司用identityserver4作為授權認證中心,剛開始用着都毫無違和感,昨兒突然就登錄不上了;

問題分析

F12看了請求,發現是請求授權的時候失敗了...

回想了一下腦海里關於對identityserver4的些許理解,懷疑是證書的問題,因為當時制作證書的時候時間設置的有點短,可能過期了,於是一頓操作替換證書,重新部署請求,然而並不是...

既然猜測的不對,那就只能通過看服務端日志了,果然找到了一段日志:Showing login: User is not authenticated

打開百度,復制、粘貼一把梭,果然面向百度編程就是easy.

原因

由於最新版的Chrome的Cookie策略導致寫Cookie失敗,從而導致用戶認證的失敗.
SameSite=strict:對於來自不同於源站的站點發出的請求,不發送cookie,為了防止CSRF攻擊。
SameSite=lax:類似於strict,但是當用戶有意地通過單擊鏈接或發送表單啟動請求時,就會發送cookies。不會在腳本請求時發送。
SameSite=none:無論請求來自哪里都可以(但是需要https)。

解決

問題找到了解決也就簡單了,把Cookie策略設置了lax即可(誰讓公司沒上https,才出了這么多事兒).

public void ConfigureServices(IServiceCollection services)
{
    ....
    // 配置cookie策略
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.MinimumSameSitePolicy = Microsoft.AspNetCore.Http.SameSiteMode.Lax;
    }
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    ....
    app.UseCookiePolicy();
}

解決問題的鏈接:https://www.e-learn.cn/topic/3672478

總結

  1. 其實這個問題公司的測試同事好久之前就出現過,只是因為自己的無知,當時自己無法復現這個問題,所以就沒有去重視它,所以珍惜測試同事提出的每個bug,進步就在眼前.
  2. 軟件想要持續的保持活力得不停的更新、迭代,不然就會被拋棄,小小的cookie都已經發展得這么復雜了...


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM