2013-10-21 122 views
8

請考慮以下(常見)方案。我將首先嚐試使用OAuth指定我理解(好)Web API的樣子。如果我有任何錯誤的流量,請糾正我。Web API認證和授權(OAuth)

我的API:關注的中心,所有的客戶都使用它。

我的Web應用程序:使用API​​就像任何其他客戶端會。

我的移動應用程序:也使用API​​,與web應用程序的方式完全相同。用戶應該能夠在不打開瀏覽器的情況下進行身份驗證。

第三方Web應用程序:也使用API​​ - 但是,用戶/資源所有者必須授予應用程序執行某些操作的權限。他們通過重定向到我的網站(或打開彈出窗口),在必要時記錄用戶並提示用戶訪問。

第三方移動應用程序:與第三方網絡應用程序的要求相同。


的問題(一個或多個)

  • 如若API處理身份驗證和授權?
  • API如何知道誰(使用客戶端應用程序的資源所有者)正在使用API​​?
  • 當用戶使用我的官方客戶時,他們顯然不需要授予任何權限 - 我的客戶應該擁有所有權限。在調用API時,我如何區分我的官方客戶端和第三方客戶端?

以下是我的理解,並會做到目前爲止。這是我真正需要幫助的地方 - 正確地完成這項工作。

官方的Web應用程序

- Client attempts to `GET /api/tasks/". 
- API says "who are you? (HTTP 401) 
- Official web app redirects to login form. 
> Bob enters his credentials. 
- .. now what? Get an authentication token? Cookie? 
  • 由於web應用程序只是我的API的消費者,如何將我管理的登錄狀態?網絡應用程序應該這樣做嗎?
  • Web應用程序是否應該直接訪問用戶數據庫,而不是根據API驗證憑據?

我主要使用.NET(C#),但我喜歡一種適用於基於Node JS的API的方法。

你會怎麼做呢?特別是客戶流量對我來說是一個問題。我問的原因是,我已經讀過,除非有絕對必要,否則你不應該推出自己的安全解決方案,所以如果有任何標準指導方針,請告訴我。 :)

+0

您是否找到解決您的問題的方法,因爲我目前正在尋找一個最好的和最低的尋找解決方案。 – idipous

+0

不,可悲的是.. – Jeff

+0

oauthbible.com可能有幫助嗎? –

回答

3

看看新的Web API 2 oAuth的東西。

基本上啓動一個新的Web API項目,並確保您選擇更改身份驗證。

然後,這是一個調用註冊表控制器的簡單情況。然後,這會爲您創建一個令牌,然後可以在該用戶的每個請求的標頭中發送該令牌。

使用fiddler檢查API調用並創建一些模擬帳戶。

+0

我會檢查出來的!謝謝! – Jeff

0

已經有一段時間了,但我想我會記錄我最終做了什麼。

我使用DotNetOpenAuth。我有一個客戶端數據庫,他們有一個Trusted字段 - 如果設置了這個字段,它允許客戶端使用密碼授權,該授權會自動授予爲該客戶端預定義的所有範圍。

第一方Web應用程序使用普通Cookie身份驗證 - 在JS中公開客戶端憑據會太冒險。