2012-04-20 7 views
5

私はdotnetopenauthを使ってOAuth2.0認証サーバーを構築しました。認証サーバーは認証、承認を管理し、呼び出し元にaccessTokenを割り当てます。呼び出し元はアクセストークンを使用して、リソースサーバーのapi(webservices)にアクセスします。 もし基づいて着信API要求を検証し、認証プロセスを構築する方法、リソースサーバーで私のAPIを構築するためにServiceStackを使用している場合、リソースサーバー、WCFを使用して建てAPIのdotnetopenauthによって提供されるサンプルはOAuthAuthorizationManagerServiceStackをOAuth2.0のリソースサーバーとして使用してセキュリティで保護されたAPIを構築するにはどうすればよいですか?

によって認証することができ従ってください割り当てられたOAuth2.0アクセストークンで機能は、dotnetopenidサンプルのOAuthAuthorizationManagerに似ていて、ログインセッションに基づいていないはずです。

答えて

4

ただ、いくつかの更新

私はServiceStack.ServiceInterfaceからAuthenticateAttributeまたはRequiredRoleAttributeを使用していませんでした。

AuthenticateAttributeRequiredRoleAttributeで提供される機能を置き換えるために、2つのカスタムRequestFilterAttributeを作成します。

それぞれのカスタムでは、RequestFilterAttributeExecuteメソッドでは、アクセストークンを確認するためにdotnetopenauthのメソッドを使用しています。

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

詳細はservicestackとdotnetopenauth両方から関連するドキュメントを参照するには、次のようにアクセストークンの検証のためのコード。 ipnullその後、ないnull場合、着信要求が有効であり、例えば役割を確認するためにipを使用することができ、認証されない場合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); 

からクラスですip.IsInRole(requiredRole)

これは正しい方法であるかどうかはわかりませんが、それは私には役立ちます。もっと良い解決策は大歓迎です。

関連する問題