2012-04-20 88 views
5

我已經使用dotnetopenauth構建了一個OAuth2.0授權服務器,該服務器將管理身份驗證,授權並將調用者分配給accessToken。調用者將使用訪問令牌訪問資源服務器上的api(webservices)。 如果遵循dotnetopenauth在資源服務器提供的樣品,API使用WCF可以通過OAuthAuthorizationManager如何使用ServiceStack作爲資源服務器與OAuth2.0構建安全的API?

進行身份驗證如果使用ServiceStack建立我的資源服務器的API,建造,如何建立認證過程,驗證基於傳入的API請求關於分配的OAuth2.0訪問令牌?該功能應該類似於dotnetopenid示例中的OAuthAuthorizationManager,而不是基於登錄會話。

回答

4

只是一些更新

我沒有使用從ServiceStack.ServiceInterfaceAuthenticateAttributeRequiredRoleAttribute

我創建了2個自定義RequestFilterAttribute來替換AuthenticateAttributeRequiredRoleAttribute提供的功能。

在每個自定義RequestFilterAttributeExecute方法中,我使用dotnetopenauth中的方法來驗證訪問令牌。

//httpReq==req from Execute(IHttpRequest req, IHttpResponse res, object requestDto) 

訪問令牌驗證的代碼如下,參考servicestack和dotnetopenauth的相關文檔獲取更多信息。 ResourceServer是dotnetopenauth

HttpRequestBase reqBase = new HttpRequestWrapper((System.Web.HttpRequest)httpReq.OriginalRequest); 

var resourceServer = new ResourceServer(new StandardAccessTokenAnalyzer(AuthorizationServerPublicKey, ResourceServerPrivateKey)); 

IPrincipal ip = null; 
resourceServer.VerifyAccess(reqBase, out ip); 

類如果ipnull則未通過身份驗證,如果沒有null,傳入的請求是有效的,可以使用ip檢查的作用如ip.IsInRole(requiredRole)

我不確定這是否是執行檢查的正確方法,但它適用於我。歡迎任何更好的解決方案。

相關問題