2017-10-10 97 views
0

看到這個video,它在OAuth2中詳細說明了客戶端應用程序首先必須從授權服務器獲得授權許可,然後在能夠訪問資源服務器之前使用該授權獲取令牌。贈款的用途是什麼?爲什麼不在用戶用他/她的用戶名和密碼登錄後馬上給予客戶令牌?爲什麼您需要授權許可才能直接授予令牌?

回答

3

因爲它對於某些應用程序類型更安全。

你所描述的是所謂的授權代碼流。它通常用於「經典」Web應用程序,只有後端需要訪問資源服務器。授權代碼交換訪問令牌發生在後端,訪問令牌永遠不會離開它。交換隻能進行一次,另外客戶端ID和祕密(存儲在後端)是必要的。

單頁面應用程序通常使用隱式流,其中訪問令牌直接在URL中傳遞到前端。

查看更多在這裏: IdentityServer Flows

編輯:問:「我還沒有看到它是如何更安全的因爲你必須有授權,以獲得令牌爲什麼需要2而不是隻有一件東西來訪問資源?如果有人盜取令牌,他們可以訪問資源 - stackjlei「

」竊取「訪問令牌將獨立於您的應用程序如何獲取它。但是,在後端竊取訪問令牌要比在前端困難得多。

授權代碼傳送到後端也超過了前端,但風險是有人攔截,並使用它很小:

  1. 它只能進行一次交換。
  2. 您需要client-id和client-secret才能交換它。客戶端祕密只在後端提供。
  3. 通常情況下,授權碼將由您的後端立即交換到訪問令牌。所以它的壽命只有幾秒鐘。之後有人獲得使用的授權碼並不重要。
+0

我還是不明白它是如何更安全的,因爲你必須獲得授予才能獲得令牌。爲什麼需要2件事而不是隻有1件事來訪問資源?如果有人竊取了令牌,他們仍然可以訪問資源 – stackjlei

1

在你的情況有可能是兩臺服務器的授權和資源之一。 它也可能只有一個,但讓我們來想象這種情況。

授權服務器的目的是向已知客戶端發佈短期訪問令牌。客戶通過他們的CLientID和CLientSecret識別自己。

授權服務器(AS)持有客戶端及其機密列表,並首先進行檢查以確保傳遞的值與其列表匹配。如果他們這樣做,它發出一個短暫的令牌。

然後客戶端可以與資源服務器(RS)通話,而令牌有效。一旦令牌到期,可以請求新令牌,或者如果授權服務器允許,可以刷新過期的令牌。

這裏的重點是安全性。通常,訪問令牌通過請求的Authorization頭傳遞,並且該請求需要通過https來確保數據不會被盜用。如果不知何故,某人獲得了一個訪問令牌,他們只能使用它直到它到期,因此令牌的短暫生命實際上非常重要。這就是爲什麼你不發出一個永不過期的令牌。

+0

爲什麼要使用臨時令牌?爲什麼不僅僅使用臨時授權而且根本不使用令牌?我不明白這兩個步驟如何使它更安全 – stackjlei