2013-07-15 121 views
15

我有一個Web API應用程序,我已經理解OAuth將是API的標準安全模型,其中認證服務器將負責生成授權令牌,以便用戶可以發送到我們的服務器並使用服務。如何開始使用OAuth來保護Web API應用程序?

我很新的這一點,但我理解的角色參與其中:

  • 資源所有者
  • 客戶
  • 資源服務器
  • 授權服務器

但是,什麼是OAuth的完全是在實踐中,而不是在理論上?它是一個.NET庫嗎?它是由獨立公司提供的服務嗎?是我可以在本地開發機器上配置的東西,看看它是如何工作的?

如何開始使用OAuth來保護Web API應用程序?

回答

17

OAuth是一個協議;目前的版本是OAuth 2.0。對您的問題更多的是,該鏈接列出了各種技術中協議的幾種實現。爲了與.NET Web API一起使用,您可能對DotNetOpenAuth感興趣,它提供了OAuth 1和OAuth 2的實現。

我正在使用DotNetOpenAuth來保護.NET Web API。我有一個OAuth2Handler,它擴展了DelegatingHandler,它在傳入請求到達任何控制器之前插入到Web API管道中。 OAuth2Handler執行以下操作:

  1. 實例化一個DotNetOpenAuth ResourceServer
  2. 呼叫ResourceServer.GetPrincipal()讀取和解密的訪問令牌 (由AuthorizationServer其他地方發出,並返回一個 OAuthPrincipal(在我來說,我讀的附加數據DotNetOpenAuth實現允許您傳遞和創建ClaimsPrincipal。)
  3. 將包含從訪問標記讀取的用戶信息的IPrincipal分配給線程的User屬性和當前HTTP上下文所以可從ApiController.User物業在服務控制器:httpContext.User = Thread.CurrentPrincipal = principal;

老實說,這讓所有的工作(例如設置授權服務器,資源服務器,證書等)不是微不足道的。不幸的是,DotNetOpenAuth網站上似乎沒有很好的指南。下面是一些其他的任務,你必須在你前面,如果你走這條路線:

  • 實現IAuthorizationServer - 這是 DotNetOpenAuth提供的接口,它允許你插入到庫,並使用 他們實施發行OAuth2訪問令牌。您還需要實施INonceStoreICryptoKeyStore,我使用EntityFramework上下文進行存儲。
  • 配置證書 - AuthorizationServerResourceServer每個都使用證書來加密/解密訪問令牌,以確保它們只能彼此訪問。我構建了一些custom configuration,所以我可以在我的授權服務器應用程序和我的Web API服務(資源服務器)的web.config文件中管理此配置。
  • 管理刷新令牌 - 首次從授權服務器請求訪問令牌時,您將返回(取決於您的配置)OAuth2刷新令牌和訪問令牌。這些服務使用應該是短暫的訪問令牌。刷新令牌用於獲取更多訪問令牌。刷新令牌應該保密(無論在您的方案中如何)。對我來說,這意味着刷新標記絕不會暴露給我的Web應用程序中的客戶端JavaScript。

我希望能夠幫助您瞭解如何開始使用OAuth和.NET Web API。這裏的a blog post演示了其中的一些步驟。 This SO answer給出了一些更高層次的圖片客戶端細節。

(DotNetOpenAuth在線文檔似乎現在正在下載...抱歉沒有指向它們的鏈接;顯然它有happened before)。

+0

任何機會,你可以分享一些源代碼。我一直在玩這個幾個小時,這是一個PITA。 DotNetOpenAuth文檔在這個特定的例子中沒有多大幫助。 –

相關問題