2012-01-06 3 views
0

DotNetOpenAuth ctp 4.0を動作させるのが難しいです。ここに状況があります: 私はOAuth2サンプルのものと同じようなリソースサーバーを持っていますが、私はWCF Web Apiプレビュー6を使用していますので、クライアントは操作要求を出しているクライアントがこれを行うために既に権限が与えられています。これを行うには、ResourceServer.VerifyAccessメソッドが呼び出されます。このメソッドはnull例外をスローしていますが、なぜそれが分からないのですか?このメソッドはnull参照をスローしない場合、このコードは場合に役立ちますDotNetOpenAuth ctp 4.0 ResourceServer.VerifyAccess()メソッドがnull例外を投げる

protected override HttpRequestMessage OnHandle(HttpRequestMessage input) 
    { 
     var principal = VerifyOAuth2(input); 
     if(principal == null) 
     { 
      throw new HttpResponseException(new HttpResponseMessage 
               { 
                StatusCode = HttpStatusCode.Unauthorized, 
                Content = new StringContent("Invalid Access Token") 
               }); 
     } 

     var roles = _authorizationAttribute.Roles.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries); 
     if(!roles.Any(role => principal.IsInRole(role))) 
     { 
      throw new HttpResponseException(new HttpResponseMessage 
      { 
       StatusCode = HttpStatusCode.Forbidden, 
       Content = new StringContent("User has not permission to access this resource") 
      }); 
     } 

     return input; 
    } 

    private static IPrincipal VerifyOAuth2(HttpRequestMessage request) 
    { 
     var headers = request.Headers; 
     var headersCollection = new WebHeaderCollection(); 
     foreach (var header in headers) 
     { 
      headersCollection.Add(header.Key, header.Value.ToString()); 
     } 

     using (var signing = MvcApplication.CreateAuthorizationServerSigningServiceProvider()) 
     { 
      using (var encrypting = MvcApplication.CreateResourceServerEncryptionServiceProvider()) 
      { 
       var resourceServer = new ResourceServer(new StandardAccessTokenAnalyzer(signing, encrypting)); 

       IPrincipal result; 
       var httpRequestInfo = new HttpRequestInfo(request.Method.ToString(), request.RequestUri, 
                  request.RequestUri.AbsoluteUri, headersCollection, request.Content.ReadAsStreamAsync().Result);//Since I dont have an HttpResourceInfo Object I need to build one from my request, using an overloaded method. 
       var error = resourceServer.VerifyAccess(httpRequestInfo, out result); //here is where the exception is thrown. 
       // TODO: return the prepared error code. 
       return error != null ? null : result; 
      } 
     } 

が、私は知りませんが、場合には、それは、あなたが私に言うことができません。

この

は、私は私の操作ハンドラを書いた方法です例外??多分それは私を少し助けるでしょう!前もって感謝します。

+0

質問..あなたはスプリットを行い、新しい[] {""}を渡すと偶然そこでエラーが発生していますか?それを見て使用しないでください – MethodMan

+0

いいえ、それ以前に例外がスローされています。 VerifyOAuth2()メソッドの – Daniel

+0

IPrincipalは、.netフレームワークのインターフェイスです。 inputはWCF Web Api – Daniel

答えて

1

NullReferenceExceptionのスタックトレースが役に立ちます。

代わりに、HttpRequestMessagePropertyをWCFから入手して、HttpRequestInfoコンストラクタに、OAuthAuthorizationManagerのサンプルと同じ方法で渡してみましたか?

+0

はい、これが問題を解決しました! – Daniel

関連する問題