是否可以使用DotNetOpenAuth和LinkedIn Developer Toolkit请求用户的完整个人资料?

时间:2012-09-13 11:04:11

标签: c# asp.net linkedin dotnetopenauth

使用DotNetOpenAuth请求访问令牌时,它只验证基本用户配置文件。

Authorization.BeginAuthorize();

是否有某种方式要求用户对其完整个人资料进行身份验证,可能是通过在令牌管理器中指定某些内容?

我知道在对LinkedIn API发布POST时,你添加了scope参数,但有没有办法用DotNetOpenAuth和LinkedIn Developer Toolkit做这个?

https://api.linkedin.com/uas/oauth/requestToken?scope=r_fullprofile

我还可以看到在LinkedIn Developer Toolkit中有完整配置文件的许多ProfileField枚举,因此我假设可以通过这种方式访问​​它们。 e.g。

ProfileField.Industry

ProfileField.ThreeCurrentPositions

1 个答案:

答案 0 :(得分:2)

我一直在寻找一种方法来做到这一点。您需要扩展LinkedIn Developer Toolkit。

Download the source

将以下函数重载添加到WebOAuthAuthorization.cs

public void BeginAuthorize(Uri callback, IDictionary<string, string> requestParameters)
{
    this.Consumer.Channel.Send(this.Consumer.PrepareRequestUserAuthorization(callback, requestParameters, null));
}

编译它并在项目中添加对它的引用(如果你使用它,请删除NuGet包)。然后你就可以从你的代码中调用它,如下所示:

WebOAuthAuthentication webAuth = new WebOAuthAuthentication(LinkedInTokenManager, null);
Uri callback = new Uri("http://your.callback.uri");
Dictionary<string, string> requestParameters = new Dictionary<string, string>();
requestParameters.Add("scope", "r_fullprofile r_network");
webAuth.BeginAuthorize(callback, requestParameters);

关于第二个问题,配置文件字段ENUM用于传入GetCurrentUser方法(可能还有其他方法)以指定要返回的字段,例如

LinkedInService li = new LinkedInService(webAuth);
List<ProfileField> fields = new List<ProfileField>();
fields.Add(ProfileField.ThreeCurrentPositions);
fields.Add(ProfileField.Industry);
Person person = li.GetCurrentUser(ProfileType.Standard, fields);

然后可以在Person对象上访问这些字段(您未指定的字段为空)。