c# Asp.net Linkedin授权使用Linkedintoolkit与DotNetOpenAuth

本文关键字:Linkedintoolkit DotNetOpenAuth 授权 Asp net Linkedin | 更新日期: 2023-09-27 18:04:18

我正在尝试授权我的ASP.net应用程序使用领英api,但似乎无法正确验证。我希望有人能看看我的源代码,看看我可能做错了什么。

首先,我试着遵循这个Linkedintoolkit文档中的步骤,尽管我遵循了这些步骤,但我仍然没有运气。

我所理解的过程,用最简单的术语来说如下:

  1. 创建DotNetOpenAuth的IConsumerTokenManager的实现
  2. 使用WebOAuthAuthorization类授权我的应用程序,并返回一个访问令牌为未来的API调用。

我的IConsumerTokenManager实现如下

在这个例子中,我添加了一个伪api密钥和秘密密钥,原因很明显

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DotNetOpenAuth.OAuth.ChannelElements;
using DotNetOpenAuth.OAuth.Messages;
namespace UserLibrary.SocialMedia
{
    public class ConsumerTokenManager : IConsumerTokenManager
    {

        private const string API_KEY = "ylk7j2jq4j7l";
        private const string SECRET_KEY = "WH3dlPFhPyWG0xlw";
        private Dictionary<string, string> tokensAndSecrets = new Dictionary<string, string>();
        public ConsumerTokenManager()
        {
            ConsumerKey = API_KEY;
            ConsumerSecret = SECRET_KEY;
        }

        #region ITokenManager Members
        public string ConsumerKey { get; private set; }
        public string ConsumerSecret { get; private set; }
        public string GetTokenSecret(string token)
        {
            return this.tokensAndSecrets[token];
        }
        public void StoreNewRequestToken(UnauthorizedTokenRequest request, ITokenSecretContainingMessage response)
        {
            this.tokensAndSecrets[response.Token] = response.TokenSecret;
        }
        public void ExpireRequestTokenAndStoreNewAccessToken(string consumerKey, string requestToken, string accessToken, string accessTokenSecret)
        {
            this.tokensAndSecrets.Remove(requestToken);
            this.tokensAndSecrets[accessToken] = accessTokenSecret;
        }
        /// <summary>
        /// Classifies a token as a request token or an access token.
        /// </summary>
        /// <param name="token">The token to classify.</param>
        /// <returns>Request or Access token, or invalid if the token is not recognized.</returns>
        public TokenType GetTokenType(string token)
        {
            throw new NotImplementedException();
        }
        #endregion
    }
}
下面是调用BeginAuthorization 的代码块
ConsumerTokenManager consumerTokenManager = new ConsumerTokenManager();
            _webOAuthorization = new WebOAuthAuthorization(consumerTokenManager, _accessToken);
        _webOAuthorization.BeginAuthorize();
        _accessToken = _webOAuthorization.CompleteAuthorize();

当'BeginAuthorization()'被调用时,我被重定向到"授予K2PS出版商访问您的LinkedIn帐户"Patrick A"只允许访问,如果你信任这个应用程序与你的领英网络信息"领英页面,然后点击'Ok我将允许它'返回我的web应用程序。然而,'_completeAuthorization()'方法从来没有命中,它的值是空的,如果我试图返回字符串。

同样值得注意的是,我的控制台输出在这个过程中抛出了一个Threading异常。

下面是我的控制台输出

类型为"System.Threading"的第一次偶然异常。在mscorlib.dll中发生ThreadAbortException'类型为System.Threading的异常。ThreadAbortException'在mscorlib.dll中发生,但未在用户代码中处理

我对Oath相当陌生,但一直在倾泻API,似乎无法解决这个问题。

c# Asp.net Linkedin授权使用Linkedintoolkit与DotNetOpenAuth

您可以尝试我从这里找到的这个示例,我之前成功实现了。