2014-03-19 24 views
3

我使用django-oauth2-provider與rest-framework在我的API中提供身份驗證。 我的移動應用程序將連接到我的REST API以檢索一些數據。沒有第三方應用程序會參與這個過程。django-oauth2-provider:獲取令牌而不發送client_secret

根據this,此用例所需的授予類型將是密碼授予。由於將祕密存儲在設備中是一個壞主意,我需要在沒有它的情況下訪問該令牌。

我試圖發送沒有祕密的請求:

curl -X POST -d "client_id=MY_CLIENT_ID&grant_type=password&username=user&password=pass" http://localhost:8000/oauth2/access_token/ 

但我得到的迴應是:

{"error": "invalid_client"} 

我的問題是,它是否是可能的做到這一點Django的oauth2-提供者,以及如何去做。

回答

1

您需要通過django管理界面創建一個客戶端,並用ID替換「MY_CLIENT_ID」。應用

+0

我已經做到了。問題是,如果不發送客戶端密碼,我也無法獲取令牌數據。我總是得到invalid_client錯誤。所以我需要的是一種獲取令牌而不發送客戶端密碼的方式。 – Esparver

+0

你是否設法解決這個問題? – DjangoRocks

1

「客戶端類型」 應該是 「公共」

1
  1. 設置Authorization Grant TypeResource owner password-based
  2. WSGIPassAuthorization On在同一地點WSGIScriptAlias
+0

謝謝!這解決了我的Apache – FBidu

0

你應該使用密碼交付式。以下curl命令適用於django-oauth-toolkit。我相信它也可以與任何其他oauth供應商合作。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d 'grant_type=password&username=user&password=pass&client_id=client_id' 'http://localhost:8000/o/token/' 

請參看下面的鏈接瞭解更多信息:https://aaronparecki.com/articles/2012/07/29/1/oauth2-simplified#password