2010-06-13 4 views
10

나는 Customer Key와 Secret만을 가지고있는 2 Legged OAuth를위한 DotNetOpenAuth (DNOA) 라이브러리를 사용하여 요청으로부터 Signature를 검증 할 필요가있는 CSharp에 인증 모듈을 만들려고한다.누구나 DNOA를 사용하여 2 개의 다리가있는 OAuth를 구현 했습니까?

DNOA를 사용하는 2 다리 식 OAuth의 샘플 구현이 있다면 도움이 될 것입니다. 그렇지 않은 경우 구현 방법에 대한 아이디어도 효과가 있습니다. 도움을 주시면 감사하겠습니다.

+0

인증 모듈이 제대로 작동합니까? 나는 비슷한 것을 찾고있다. 유일한 대답은 소비자를 만드는 것입니다. – AlexGad

답변

6

2-legged OAuth에서 DNOA를 사용할 수 없어서 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs을 서명 서명을 처리하기 위해 기본 클래스로 사용하는 것으로 끝났습니다. 당신은 인증 헤더가 당신의 웹 요청을 구축하고 보내 일단 당신이 할 필요가 ...

string sigMethodType = GetSigMethodType(); 
string ts, nonce, normalizedUrl, normalizedParams; 
string sig = GenerateSignature(new Uri("http://some-endpoint-to-call"), "GET", out nonce, out ts, out normalizedUrl, out normalizedParams); 

string header = "OAuth realm=\"" + normalizedUrl + "\"," + 
       OAuthConsumerKeyKey + "=\"" + ConsumerKey + "\"," + 
       OAuthSignatureMethodKey + "=\"" + "HMACSHA1SignatureType" + "\"," + 
       OAuthSignatureKey + "=\"" + sig + "\"," + 
       OAuthTimestampKey + "=\"" + ts + "\"," + 
       OAuthTokenKey + "=\"" + String.Empty + "\"," + 
       OAuthNonceKey + "=\"" + nonce + "\"," + 
       OAuthVersionKey + "=\"" + OAuthVersion + "\""; 

... 서브 클래스를하고 HTTP 인증 헤더를 구축하기 위해 서명 방법을 사용

var wr = (HttpWebRequest)HttpWebRequest.Create(messageEndpoint.Location); 
wr.Headers.Add(HttpRequestHeader.Authorization, BuildAuthHeader(messageEndpoint)); 
wr.ContentType = messageEndpoint.ContentType; 
wr.Method = CdwHttpMethods.Verbs[messageEndpoint.HttpMethod]; 
using (var resp = (HttpWebResponse)req.GetResponse()) 
{ 
    switch (resp.StatusCode) 
    { 
     case HttpStatusCode.Unauthorized: 
      Assert.Fail("OAuth authorization failed"); 
      break; 
     case HttpStatusCode.OK: 
      using (var stream = resp.GetResponseStream()) 
      { 
       using (var sr = new StreamReader(stream)) 
       { 
        var respString = sr.ReadToEnd(); 
       } 
      } 
      break; 
    } 
} 

업데이트 : 또한 devoted의 oauth 소비자와 작업 할 수있는 2 발이되었습니다. http://code.google.com/p/devdefined-tools/wiki/OAuthConsumer

var endPoint = new Uri("http://example.com/restendpoint.svc"); 
      var ctx = new OAuthConsumerContext 
         { 
          ConsumerKey = "consumerkey1", 
          ConsumerSecret = "consumersecret1", 
          SignatureMethod = SignatureMethod.HmacSha1 
         }; 

      var session = new OAuthSession(ctx, endPoint, endPoint, endPoint); 
      var respText = session.Request().Get().ForUri(endPoint).ToString(); 

가 빈 생성자하거나 상황에 걸리는 과부하를했지만,이 작동하는 것 같다 경우 그것은 좋은 것입니다.

+0

다만, 참고 -하지만 DevDefined.OAuth는 요즘 소비자 컨텍스트를 취하는 OAuthSession 생성자를 오버로드하고 XAuth를 지원합니다 (Twitter API 등에서 사용됨). https://dev.twitter.com/docs/ oauth/xauth)는 2-legged OAuth 1.0a 스토리를 향상시킵니다. – Bittercoder

관련 문제