簡體   English   中英

如何在 HttpOnly Secure cookie 中存儲 OWIN OAuth 2 access_token?

[英]How do I store an OWIN OAuth 2 access_token in an HttpOnly Secure cookie?

我的主要目標是正確保護一系列 Web API 控制器。 到目前為止,我已經使用 OWIN 來生成 access_tokens 並通過使用 [Authorize] 裝飾一個類來測試該功能,然后使用 jQuery ajax 調用在標頭中包含一個 Bearer 令牌來調用它。 這似乎是正確的路徑,但我讀過本地存儲並不安全。 相反,標記為 HttpOnly 和 Secure 的 cookie 似乎是受歡迎的解決方案。

我已經能夠找到人們正在使用本地存儲的提及,甚至可以瀏覽一下:

https://docs.microsoft.com/en-us/aspnet/web-api/overview/security/individual-accounts-in-web-api

我沒有找到的是如何配置 OWIN 以使用 cookie 來存儲令牌。

服務器端架構

OWIN 堆棧會將您綁定到基於 cookie 的安全性,並像這樣工作。 這可能非常適合您的要求:

  • Web UI 向 Web 后端發出 Ajax 調用並隱式發送一個 auth cookie
  • Web UI 僅限於調用同一域中的 Web 后端
  • Web 后端從 cookie 獲取訪問令牌
  • Web 后端將訪問令牌轉發到不同域中的 API
  • API 驗證訪問令牌

此線程中演示了一種常見方法,其中令牌包含在身份驗證 cookie 中,Web 后端從令牌中解壓 cookie。

var id = new ClaimsIdentity(n.AuthenticationTicket.Identity.AuthenticationType);

id.AddClaim(new Claim("access_token", tokenResponse.AccessToken));
id.AddClaim(new Claim("refresh_token", tokenResponse.RefreshToken));
id.AddClaim(new Claim("id_token", n.ProtocolMessage.IdToken));

要求?

我總是建議從目標/要求開始,而不是從 Microsoft 等供應商的技術開始,后者通常有點陳舊或欠佳。

客戶端架構

如果您想在客戶端做更多,那么另一種方法是使用 SPA 架構並在 Javascript 中做更多:

  • 使用諸如oidc-client 之類的庫
  • 將訪問令牌直接發送到跨域 API
  • 考慮僅將令牌存儲在瀏覽器內存中而不是本地存儲中

如果在您未來的規划方面對這種方法感興趣,那么我的這兩個帖子是一個很好的起點:

無論如何,如果其中任何一個有用,請隨時發布后續問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM