1.NET Core Web Api跨域問題

來源:互聯網
上載者:User

標籤:sub   targe   ons   microsoft   實踐   config   dir   detail   安全   

官方說明
  • CORS means Cross-Origin Resource Sharing.
  • Refer What is "Same Origin" Part
  • Detailed Procedure
具體實踐
  • 需要引入 Microsoft.AspNetCore.Mvc.Cors 包
  • Cors配置
    • Startup.cs檔案ConfigureServices方法中,將Cors服務放到容器中
    • services.AddCors(options); 傳一個options,指定名字並配置它,這個時候跨域並沒有起作用。
    • options可以對Origin、Header、Method進行指定,這些配置方式是fluent api。
    • AllowAnyOrigin()表示允許任意的源、要求標頭、請求方式。
      • 以配置AllowAnyOrigin()為例,回應標頭裡會有Access-Control-Allow-Origin:*
    • WithOrigins(string[] origins)入參為允許存取的源、要求標頭、請求方式。
      • 以配置AllowAnyOrigin()為例,回應標頭裡會有Access-Control-Allow-Origin:http://diagd.gridsumdissector.com
    • AllowCredentials(),Response Header裡會有Access-Control-Allow-Credentials:true
  • Cors生效(三選一,推薦第一種)
    • Startup.cs檔案Config方法,給全域加上允許跨域,則所有的配置裡允許的資源(多為controller中的介面)都可以跨域訪問。
      • app.UseCors("CorsPolicy"); //這裡“CorsPolicy”是自訂的名字,在options中設定。
    • Startup.cs檔案ConfigureServices方法,給全域加上允許跨域,效果同上。
      • services.Configure(options => options.Filters.Add(new CorsAuthorizationFilterFactory("CorsPolicy"))); //“CorsPolicy”同上。
    • 在指定controller或方法上標註[EnableCors("CorsPolicy")],允許這些資源跨域訪問。//“CorsPolicy”同上上。
  • 注意事項
    • 由於前端通常都會將withCredential設定為true,所以配置時必須AllowCredentials()。
      • XMLHttpRequest的withCredentials標誌設定為true,則cookies可以隨著請求發送。這時,如果伺服器端的響應中,如果沒有返回Access-Control-Allow-Credentials: true的回應標頭,那麼瀏覽器將不會把響應結果傳遞給發出請求的指令碼程式,以保證資訊的安全。
    • Access-Control-Allow-Origin這個頭不允許使用萬用字元,即必須指定允許的網域,用WithOrigins(string[] origins)方法,origins建議在appsettings.json檔案配置。
      • 如果一個目標網域設定成了允許任意域的跨域請求,這個請求又帶cookie的話,則請求不合法,瀏覽器會屏蔽掉返回的結果。(即如果需要實現帶cookie的跨域請求,需要明確的配置允許來源的域,使用任意域的配置是不合法的。)這是cors模型最後一道防線。假如沒有這個限制的話,那麼javascript就可以擷取返回資料中的csrf token,以及各種敏感性資料。這個限制極大的降低了cors的風險。
    • 在appsettings.json中配置origins時,務必指定scheme、domain、subdomain、port,且末尾千萬不要加反斜線。"http://localhost:6395"

1.NET Core Web Api跨域問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.