簡體   English   中英

OAuth 2.0 如何使用密碼授權使授予的身份驗證令牌無效

[英]OAuth 2.0 How to invalidate granted auth tokens using password grant

對於以下場景:

  1. 用戶代理(瀏覽器、用戶)向資源服務器發出 Ajax 請求
  2. 使用 DotNetOpenAuth 的 ASP.NET MVC 應用程序(客戶端)
  3. OAuth-授權服務器
  4. ASP.NET Web API(資源服務器)

用戶輸入他的憑據以登錄到 MVC 應用程序。 MVC 應用程序使用用戶的憑據和 MVC 應用程序的 Client.Id + Client.Secret 使用授權服務器的密碼授予令牌請求。 OAuth 令牌由 MVC 應用程序從授權服務器接收。 令牌被傳遞回客戶端,客戶端將令牌存儲在 LocalStorage 中。

現在我的問題:

  1. 如何使令牌無效,使用戶無法再訪問資源服務器(Web API)。 由於令牌現在駐留在 LocalStorage 中,MVC 應用程序無法再控制令牌。 一個解決方案可能是使用非常短的到期時間或使用一些SignalR東西來使令牌無效,但是對於獲得令牌訪問權的惡意用戶來說,有足夠的時間來制造壞事。 我認為沒有辦法立即使令牌無效。 並且資源服務器在令牌真正過期之前不會知道令牌已失效。

  2. 如果令牌已過期,流程是什么? 我可以在瀏覽器中使用 JavaScript 檢查到期日期/或等待來自資源服務器的 401 響應,並向我的 MVC 應用程序(客戶端)發出 Ajax 刷新令牌請求,然后從授權服務器請求新令牌(使用Client.Id + Client.Secret + UserCredentials)並將新令牌傳遞回瀏覽器,然后可以將其用於對資源服務器(Web API)的進一步請求。 這是正確的方法嗎?

在注銷/密碼更改時,我可以從 LocalStorage 中刪除令牌並使服務器端的令牌無效。

我認為您實際上已經回答了您自己的問題! 您不能使服務器端的令牌無效(除非 DNOA 處理我認為不會的令牌撤銷)。 令牌是不記名令牌,因此任何擁有它的人都可以在資源服務器上使用它,直到到期時間。 讓它保持短暫是最好的方法。

同樣在使用密碼授權時,您應該只使用用戶的憑據一次,以獲取初始令牌和刷新令牌。 然后,您可以將刷新令牌與 MVC 應用程序中的用戶 ID 相關聯,並在將來使用刷新令牌來獲取新的訪問令牌。

暫無
暫無

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

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