簡體   English   中英

Django-OAuth-ToolKit:使用 OAuth2.0 的客戶端憑據授予類型為多個資源/服務生成訪問令牌

[英]Django-OAuth-ToolKit : Generating access token's for multiple resources/services using client credentials grant type of OAuth2.0

我有幾個后端 API,它們是 Django 項目。 他們有一個 UI(單頁應用程序)和一個基於用戶名密碼的登錄。

我的客戶通常是開發人員,他們不想要 UI,他們想要的只是訪問后端 API,他們可以構建自己的儀表板等。他們希望將 API 與后端系統集成。

問題

問題 1. 我打算使用 django-oauth-tool kit ,在我看來,客戶端憑據授予類型適合此用例。 我對嗎 ?

為了進行實驗,我在本地運行在 8000 端口上啟動了一個單獨的 oauth 服務器,我在 8001 上啟動了資源服務器 (r1),在 8002 上啟動了資源服務器 (r2)。

第1步 :

我去了oauth服務器的管理面板,為資源r1創建了一個用戶u1,為資源r2創建了一個用戶u2。 我轉到管理面板中的應用程序模塊,在具有授權類型資源所有者密碼的應用程序中注冊了 r1 和 r2。 為了生成訪問令牌,我調用了令牌端點

POST -d "grant_type=password&username=u1&password=u1password" -u "clientid of R1:clientsecre of fR1" http://localhost:8000/o/token/

我得到了訪問令牌

{"access_token": "KdAOMZBiMomVxpvjAWErwVGog6NRRH", "expires_in": 86400, "token_type": "Bearer", "scope": "read write introspection", "refresh_token": "ffgkZZ5NtVFh4REs0TbFAALNkJqXVQ"}

第2步:

說上面我為資源服務器 R1 生成的訪問令牌,所以我去了 R1 的設置文件並添加了這個令牌以進行自省

OAUTH2_PROVIDER = {

'RESOURCE_SERVER_INTROSPECTION_URL': 'http://localhost:8000/o/introspect/',
'RESOURCE_SERVER_AUTH_TOKEN': '9b2uVud7WXHEdyolznvvkM3KwWfkVe',  # OR this but not both:
#'RESOURCE_SERVER_INTROSPECTION_CREDENTIALS': ('5sRVXLoTQj9vlkLWaziIMZrgra1keupWIQ2On2hX','5jwMxls1JiAiQiNVnRTtbjmzgRO20FEHD0BBdiSAwvSL1XswZKqglDRke2L8Ig77ol7OE3ZdsA9SE7sry0u3BXwd1OvfFfhDVJFSLWlPG6g1vB3w4ZFc1g8ZwgzXJooc'),

}

第 3 步:我也對資源服務器 R2 執行了相同的過程。

問題二:這個注冊多個資源服務器的過程是否正確? 我是否正確設置了自省?

問題三:如何注冊運行在同一個資源服務器上的不同微服務?

第 4 步:假設現在我有一個身份驗證服務器准備為 r1 和 r2 資源生成令牌。

現在為了模擬一個場景,一個開發人員想要將我的 API 與他的應用程序集成,想要生成一個訪問令牌必須首先向 auth 服務器注冊他的應用程序,我在授權類型客戶端的 auth 服務器上注冊了一個應用程序(開發人員的應用程序)證書。

這就是我的管理面板現在使用 R1 的樣子,用戶 U1 和 R2 與 U2 注冊為資源服務器和開發人員應用程序,與任何想要訪問這些資源的客戶端的用戶無關。

在此處輸入圖片說明

第 5 步:模擬開發人員如何生成訪問令牌,我生成了這樣的訪問令牌在此處輸入圖片說明

注意:我使用了 Resource R1 的客戶端 ID 和客戶端密鑰並生成了訪問令牌,但即使對於 Resource R2 及其工作,我也能夠成功使用相同的訪問令牌。

問題 3:為什么我使用 R1 的客戶端 ID 和客戶端密碼生成的訪問令牌甚至適用於 R2。 我在這里做錯了嗎? 基本上,我希望能夠為開發人員專門為資源生成訪問令牌。 我知道有范圍和權限,但我可以只為特定資源生成訪問令牌嗎? 我需要做什么來實現這一點,我需要擴展或添加一些邏輯嗎?

問題 4:我對使用客戶端憑據授予類型的想法是否正確,我為注冊資源服務器和將要使用資源服務器的客戶端應用程序所做的步驟是否正確?

謝謝你的幫助

問題 1. 我打算使用 django-oauth-tool kit ,在我看來,客戶端憑據授予類型適合此用例。 我對嗎 ?

你是對的。

問題二:這個注冊多個資源服務器的過程是否正確? 我是否正確設置了自省?

是的,你做對了。

問題三:如何注冊運行在同一個資源服務器上的不同微服務?

您的意思是在同一資源服務器上的不同端口上運行不同的微服務嗎? 如果是,那么您必須以與 R1 和 R2 相同的方式配置資源服務器。

問題 3:為什么我使用 R1 的客戶端 ID 和客戶端密碼生成的訪問令牌甚至適用於 R2。 我在這里做錯了嗎? 基本上,我希望能夠為開發人員專門為資源生成訪問令牌。 我知道有范圍和權限,但我可以只為特定資源生成訪問令牌嗎? 我需要做什么來實現這一點,我需要擴展或添加一些邏輯嗎?

訪問令牌是機密的 如果與任何人共享,任何一個資源都可以訪問它。 例如:- 如果我有你的 FB 身份驗證令牌,你和我可以用它做同樣的事情,不管這個令牌屬於誰。

問題 4:我對使用客戶端憑據授予類型的想法是否正確,我為注冊資源服務器和將要使用資源服務器的客戶端應用程序所做的步驟是否正確?

  1. 是的,使用client_credentials是處理問題陳述的正確方法。
  2. 是的,您的設置方式正確。 但是,請查看 JWT 以尋找替代的高級方法。 使用 JWT 避免了對 OAuth 服務器的內省調用,從而節省了網絡調用。

為了簡單地保護后端,您可以使用內置的Token Authentication

開始是完全安全的。 它限制每個用戶/帳戶只能使用一個令牌,這可能會在輪換/撤銷令牌時影響“用戶體驗”。 在擴展以支持大交易量方面也存在一些缺點。 否則真的很好。

一旦您更好地了解您的需求,您就可以考慮轉向 JWT、OAuth 或其他更高級/更復雜的基於令牌的身份驗證方法。

暫無
暫無

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

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