DotNetOpenAuthを使用して、ユーザーに代わってユーザーを検索する基本的なプログラムを作成しようとしています。OAuthについて学習するための単純なプログラム。現在、認証しようとして立ち往生していますが、認証しようとすると、linkedInからHTTP400ステータスコードを取得します。
DesktopConsumersとWebConsumersの両方を使用してみましたが、どちらも同じように失敗します。例外の原因となる特定の関数が34行目のRequestUserAuthorizationの呼び出しであることを知っており、空の辞書とnullの両方を入力として使用しようとしましたが、何も起こりませんでした。
プログラムには、メインを含むTestLinkedIn.csクラスと、IConsumerTokenManagerの非常に単純な実装であるLinkedInTokenManager.csクラスの2つのクラスを使用しています。
TestLinkedIn.csのコードは次のとおりです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DotNetOpenAuth.Messaging;
using DotNetOpenAuth.OAuth.Messages;
using DotNetOpenAuth.OAuth;
using DotNetOpenAuth.OAuth.ChannelElements;
namespace Project
{
class TestLinkedIn
{
#region Variables
private static string APIKey = "APIKey";
private static string APISecret = "APISecret";
private static string OAuthToken = "OAuthToken";
private static string OAuthSecret = "OAuthSecret";
#endregion
static void Main(string[] args)
{
ServiceProviderDescription linkedIn = LinkedInDescription();
LinkedInTokenManager tokenManager = new LinkedInTokenManager(OAuthToken, OAuthSecret);//APIKey,APISecret);//
DesktopConsumer web = new DesktopConsumer(linkedIn,tokenManager);
string requestToken = "";
Uri authUrl = new Uri("https://steve.com");// ("https://api.linkedin.com/uas/oauth/requestToken");//"http" + "://" + "api.linkedin.com" + "/Home/OAuthCallBack");
Dictionary<string, string> empty = new Dictionary<string, string>();
try{
//UserAuthorizationRequest request = web.PrepareRequestUserAuthorization(null, null, null, out requestToken);//null, null, null);//authUrl, null, null);
//UserAuthorizationRequest request =web.Channel.Request(new AccessProtectedResourceRequest());
//web.Channel.Send(request);
authUrl = web.RequestUserAuthorization(empty, empty, out requestToken);
Console.WriteLine(requestToken);
Console.ReadKey();
}
catch (ProtocolException e)
{
Console.Write(e.StackTrace);
Console.WriteLine("Error detected");
//Console.ReadKey();
}
}
private static ServiceProviderDescription LinkedInDescription(){
ServiceProviderDescription linkedIn = new ServiceProviderDescription();
linkedIn.AccessTokenEndpoint = new DotNetOpenAuth.Messaging.MessageReceivingEndpoint
("https://api.linkedin.com/uas/oauth/accessToken", DotNetOpenAuth.Messaging.HttpDeliveryMethods.PostRequest);
linkedIn.RequestTokenEndpoint = new DotNetOpenAuth.Messaging.MessageReceivingEndpoint
("https://api.linkedin.com/uas/oauth/requestToken",DotNetOpenAuth.Messaging.HttpDeliveryMethods.PostRequest);
linkedIn.UserAuthorizationEndpoint = new MessageReceivingEndpoint("https://www.linkedin.com/uas/oauth/authorize",
HttpDeliveryMethods.PostRequest);
linkedIn.TamperProtectionElements =new ITamperProtectionChannelBindingElement[]
{new HmacSha1SigningBindingElement()};
linkedIn.ProtocolVersion=ProtocolVersion.V10a;
return linkedIn;
}
}
}
これがのコードですLinkedInTokenManager
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
namespace Project
{
class LinkedInTokenManager : IConsumerTokenManager
{
private Dictionary<string, string> tokens = new Dictionary<string, string>();
private string consumerKey;
private string consumerSecret;
public LinkedInTokenManager(string Key, string Secret)
{
consumerKey = Key;
consumerSecret = Secret;
}
public string ConsumerKey
{
get { return consumerKey; }
}
public string ConsumerSecret
{
get { return consumerSecret; }
}
public void ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret)
{
tokens.Remove(requestToken);
tokens[accessToken] = accessTokenSecret;
}
public string GetTokenSecret(string token)
{
try
{
return tokens[token];
}
catch (KeyNotFoundException k)
{
return null;
}
}
public TokenType GetTokenType(string token)
{
throw new NotImplementedException();
}
public void StoreNewRequestToken(UnauthorizedTokenRequest request, ITokenSecretContainingMessage response)
{
tokens[response.Token] = response.TokenSecret;
}
}
}
これは私がサーバーに投稿しているものです。
oauth_callback=oob&oauth_consumer_key=6415f7ed-d618-422a-b090-73f3056653d7&oauth_nonce=nGQjFcC1&oauth_signature_method=HMAC-SHA1&oauth_signature=XmUBfGVGDoBZDOC%2Bjp4Fj68MPGI%3D&oauth_version=1.0&oauth_timestamp=1357136418
これがエラーメッセージからのスタックトレースです。
at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request, DirectWebRequestOptions options)
at DotNetOpenAuth.Messaging.StandardWebRequestHandler.GetResponse(HttpWebRequest request)
at DotNetOpenAuth.Messaging.Channel.GetDirectResponse(HttpWebRequest webRequest)
at DotNetOpenAuth.Messaging.Channel.RequestCore(IDirectedProtocolMessage request)
at DotNetOpenAuth.Messaging.Channel.Request(IDirectedProtocolMessage requestMessage)
at DotNetOpenAuth.Messaging.Channel.Request[TResponse](IDirectedProtocolMessage requestMessage)
at DotNetOpenAuth.OAuth.ConsumerBase.PrepareRequestUserAuthorization(Uri callback, IDictionary`2 requestParameters, IDictionary`2 redirectParameters, String& requestToken)
at DotNetOpenAuth.OAuth.DesktopConsumer.RequestUserAuthorization(IDictionary`2 requestParameters, IDictionary`2 redirectParameters, String& requestToken)
at APIphanySalesProject.TestLinkedIn.Main(String[] args) in c:\Users\Admin\Documents\Visual Studio 2012\Projects\Project\Project\TestLinkedIn.cs:line 34
何かご意見は?