OAuth是一個協議;目前的版本是OAuth 2.0。對您的問題更多的是,該鏈接列出了各種技術中協議的幾種實現。爲了與.NET Web API一起使用,您可能對DotNetOpenAuth感興趣,它提供了OAuth 1和OAuth 2的實現。
我正在使用DotNetOpenAuth來保護.NET Web API。我有一個OAuth2Handler
,它擴展了DelegatingHandler
,它在傳入請求到達任何控制器之前插入到Web API管道中。 OAuth2Handler
執行以下操作:
- 實例化一個DotNetOpenAuth
ResourceServer
- 呼叫
ResourceServer.GetPrincipal()
讀取和解密的訪問令牌 (由AuthorizationServer
其他地方發出,並返回一個 OAuthPrincipal
(在我來說,我讀的附加數據DotNetOpenAuth實現允許您傳遞和創建ClaimsPrincipal
。)
- 將包含從訪問標記讀取的用戶信息的
IPrincipal
分配給線程的User屬性和當前HTTP上下文所以可從ApiController.User
物業在服務控制器:httpContext.User = Thread.CurrentPrincipal = principal;
老實說,這讓所有的工作(例如設置授權服務器,資源服務器,證書等)不是微不足道的。不幸的是,DotNetOpenAuth網站上似乎沒有很好的指南。下面是一些其他的任務,你必須在你前面,如果你走這條路線:
- 實現
IAuthorizationServer
- 這是 DotNetOpenAuth提供的接口,它允許你插入到庫,並使用 他們實施發行OAuth2訪問令牌。您還需要實施INonceStore
和ICryptoKeyStore
,我使用EntityFramework上下文進行存儲。
- 配置證書 -
AuthorizationServer
和ResourceServer
每個都使用證書來加密/解密訪問令牌,以確保它們只能彼此訪問。我構建了一些custom configuration,所以我可以在我的授權服務器應用程序和我的Web API服務(資源服務器)的web.config
文件中管理此配置。
- 管理刷新令牌 - 首次從授權服務器請求訪問令牌時,您將返回(取決於您的配置)OAuth2刷新令牌和訪問令牌。這些服務使用應該是短暫的訪問令牌。刷新令牌用於獲取更多訪問令牌。刷新令牌應該保密(無論在您的方案中如何)。對我來說,這意味着刷新標記絕不會暴露給我的Web應用程序中的客戶端JavaScript。
我希望能夠幫助您瞭解如何開始使用OAuth和.NET Web API。這裏的a blog post演示了其中的一些步驟。 This SO answer給出了一些更高層次的圖片客戶端細節。
(DotNetOpenAuth在線文檔似乎現在正在下載...抱歉沒有指向它們的鏈接;顯然它有happened before)。
任何機會,你可以分享一些源代碼。我一直在玩這個幾個小時,這是一個PITA。 DotNetOpenAuth文檔在這個特定的例子中沒有多大幫助。 –