簡體   English   中英

使用OAuth進行移動和使用我自己的API的網站的正確方法是什么?

[英]What is the correct way to use OAuth for mobile and website consuming my own API?

我有一個問題與OAuth 2的工作方式有關,但由於使用IdentityServer實現OAuth,我認為這是相關的。 我無法在任何地方找到答案。

我正在建立一個消耗我自己的API的網站和移動應用程序。 我的應用程序的每個用戶都將擁有一個用戶名和密碼,這將使他能夠訪問應用程序/網站,並通過API訪問他的信息。

我不確定處理用戶登錄流程的正確方法:

  1. 在網站上我有自己設計的登錄表單。 我不想將用戶移動到我的auth服務器進行登錄,然后讓他批准他給出的信息 - 他是我系統上的用戶 - 我可以訪問所有信息 - 像facebook這樣的kida有登錄和訪問權限信息 - 他們不會問你願意給他們什么。 那隱藏真的是這樣的嗎?
  2. 在移動應用程序上,我還有一個登錄表單,現在我在這里閱讀( https://tools.ietf.org/html/draft-ietf-oauth-native-apps-10)OAuth方法是登錄一個WebView ?? 看起來Facebook登錄不在他們的移動應用程序的WebView中。
  3. 我第一次看到的方法是資源所有者。 用戶將登錄,獲取令牌和刷新令牌,並可以開始使用我的API。 但是將我的client_id和秘密存儲在移動應用程序中? 在網站上的javascript文件? 感覺不對。 我當然可以調用一個API來掩蓋那些並成為登錄過程的代理......但是......(閱讀#4)。
  4. 將來我想允許第三方開發人員訪問。 為了讓他們允許我的系統用戶登錄,我將使用隱式流程。 此外,我計划讓這些開發者帳戶具有受限制的API訪問權限(例如,對API的調用次數將受到計划的限制)。 什么阻止那些開發人員在他們的網站上的系統上詢問他們帳戶的用戶名和密碼,從我的服務器獲取訪問令牌和刷新令牌的響應,然后使用我們想要的API,沒有限制,並且可以訪問整個用戶個人資料?
  5. 讓我們說我堅持資源所有者流,從服務器接收令牌和刷新令牌。 我應該在移動設備上存儲什么以及如何存儲? 什么應該存儲在瀏覽器中以及如何? 刷新令牌? 每次他打開應用程序時都會獲得一個帶有刷新令牌的新更新令牌?

編輯

只是為了澄清,因為我發現很多講座和文章從API消費者的角度來解釋這個過程(即第三方開發者):我是API所有者和auth服務器所有者,我是所有者用戶帳戶(他們是我服務的用戶),我也是我自己的消費者(雖然是網站和移動應用程序),並且將來我想讓第三方開發者允許我的用戶登錄他們對我服務的描述(有點像Facebook或谷歌)

你是不對的,你不應該在你的應用程序中存儲client_secret ,但我懷疑你會繞過存儲client_id 您也可以為應用禁用同意屏幕,並構建本機登錄視圖。 如果您不希望用戶每次使用您的應用程序時都登錄,則需要在設備上存儲access_tokenrefresh_token (可能在數據庫中加密)。

至於問題4,您可以執行以下操作:

  1. client_secret嵌入到您的(Web)應用程序中
  2. 設置哪些主機可以訪問IdentityServer上的api
  3. IdentityServer生成salt並將其發送到客戶端
  4. 客戶端使用hash(ip_address + session_salt)計算session_secret hash(ip_address + session_salt)
  5. 客戶端使用session_secretclient_secret進行API調用
  6. 服務器驗證hashclient_secret

完全阻止某人使用您的API幾乎是不可能的。 但是你應該添加各種速率限制方法,例如限制IP地址,API調用等。但沒有什么能阻止某人反編譯您的應用並訪問您的client_id

暫無
暫無

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

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