看到這個video,它在OAuth2中詳細說明了客戶端應用程序首先必須從授權服務器獲得授權許可,然後在能夠訪問資源服務器之前使用該授權獲取令牌。贈款的用途是什麼?爲什麼不在用戶用他/她的用戶名和密碼登錄後馬上給予客戶令牌?爲什麼您需要授權許可才能直接授予令牌?
回答
因爲它對於某些應用程序類型更安全。
你所描述的是所謂的授權代碼流。它通常用於「經典」Web應用程序,只有後端需要訪問資源服務器。授權代碼交換訪問令牌發生在後端,訪問令牌永遠不會離開它。交換隻能進行一次,另外客戶端ID和祕密(存儲在後端)是必要的。
單頁面應用程序通常使用隱式流,其中訪問令牌直接在URL中傳遞到前端。
查看更多在這裏: IdentityServer Flows
編輯:問:「我還沒有看到它是如何更安全的因爲你必須有授權,以獲得令牌爲什麼需要2而不是隻有一件東西來訪問資源?如果有人盜取令牌,他們可以訪問資源 - stackjlei「
」竊取「訪問令牌將獨立於您的應用程序如何獲取它。但是,在後端竊取訪問令牌要比在前端困難得多。
授權代碼傳送到後端也超過了前端,但風險是有人攔截,並使用它很小:
- 它只能進行一次交換。
- 您需要client-id和client-secret才能交換它。客戶端祕密只在後端提供。
- 通常情況下,授權碼將由您的後端立即交換到訪問令牌。所以它的壽命只有幾秒鐘。之後有人獲得使用的授權碼並不重要。
在你的情況有可能是兩臺服務器的授權和資源之一。 它也可能只有一個,但讓我們來想象這種情況。
授權服務器的目的是向已知客戶端發佈短期訪問令牌。客戶通過他們的CLientID和CLientSecret識別自己。
授權服務器(AS)持有客戶端及其機密列表,並首先進行檢查以確保傳遞的值與其列表匹配。如果他們這樣做,它發出一個短暫的令牌。
然後客戶端可以與資源服務器(RS)通話,而令牌有效。一旦令牌到期,可以請求新令牌,或者如果授權服務器允許,可以刷新過期的令牌。
這裏的重點是安全性。通常,訪問令牌通過請求的Authorization頭傳遞,並且該請求需要通過https來確保數據不會被盜用。如果不知何故,某人獲得了一個訪問令牌,他們只能使用它直到它到期,因此令牌的短暫生命實際上非常重要。這就是爲什麼你不發出一個永不過期的令牌。
爲什麼要使用臨時令牌?爲什麼不僅僅使用臨時授權而且根本不使用令牌?我不明白這兩個步驟如何使它更安全 – stackjlei
- 1. Google Cloud Storage JSON API需要什麼授權令牌?
- 2. 需要授予哪個權限才能訪問sys.dba_systems
- 3. 授予Oracle授予權限
- 4. 授予WebDeploy授權
- 5. 授權令牌值
- 6. AH01626:要求所有授予的授權結果:授予
- 7. 貝寶直接付款授權/授權可能嗎?
- 8. 權限需要授予執行
- 9. 許多會話的授權令牌
- 10. Youtube Api - 「需要授權您需要在繼續之前授權訪問」錯誤
- 11. 即使在授予publish_stream時也需要訪問令牌嗎?
- 12. GraphQL授權/許可
- 13. 爲什麼第一次授予用戶權限時創建了「授予用法」?
- 14. Google C2DM授權令牌
- 15. 發送授權令牌| Gatling
- 16. 不記名令牌授權
- 17. 獲取授權令牌
- 18. API授權令牌錯誤
- 19. Thinktecture.Identity SAML令牌未授權
- 20. 通過JWT令牌授權
- 21. Facebook授權訪問令牌?
- 22. 爲什麼我的mysql不能授予用戶特權?
- 23. 是否需要更改註冊表才能授予程序權限?
- 24. Oauth2斷言授權:爲什麼不刷新令牌?
- 25. MySQL - 授予權限
- 26. mysql授予權限
- 27. 授予LIST權限
- 28. 授予dbms_crypto權限
- 29. UILocalNotification需要許可顯示,但它已被授予
- 30. 授予用戶授予其他用戶的授權
我還是不明白它是如何更安全的,因爲你必須獲得授予才能獲得令牌。爲什麼需要2件事而不是隻有1件事來訪問資源?如果有人竊取了令牌,他們仍然可以訪問資源 – stackjlei