我正在测试DotNetOpenAuth.Samples解决方案中的“OAuth / OAuth2 / OAuthClient / Facebook.aspx”文件。
这里是代码(直接在PageLoad中从Facebook进行简单身份验证):
namespace OAuthClient {
using System;
using System.Configuration;
using System.Net;
using System.Web;
using DotNetOpenAuth.ApplicationBlock;
using DotNetOpenAuth.ApplicationBlock.Facebook;
using DotNetOpenAuth.OAuth2;
public partial class Facebook : System.Web.UI.Page {
private static readonly FacebookClient client = new FacebookClient {
ClientIdentifier = ConfigurationManager.AppSettings["facebookAppID"],
ClientCredentialApplicator = ClientCredentialApplicator.PostParameter(ConfigurationManager.AppSettings["facebookAppSecret"]),
};
protected void Page_Load(object sender, EventArgs e)
{
IAuthorizationState authorization = client.ProcessUserAuthorization();
if (authorization == null)
{
// Kick off authorization request
client.RequestUserAuthorization();
}
else
{
var request = WebRequest.Create("https://graph.facebook.com/me?access_token=" + Uri.EscapeDataString(authorization.AccessToken));
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var graph = FacebookGraph.Deserialize(responseStream);
this.nameLabel.Text = HttpUtility.HtmlEncode(graph.Name);
}
}
}
}
}
}
当Page_Load第一次触发时,authorization == null,所以client.RequestUserAuthorization();调用已执行,然后,Page_load再次触发。
为什么?我不明白机制。
我使用fiddler在“client.RequestUserAuthorization()”之后嗅探facebook发回的响应,但它总是一个空的身体。
我的最终目标是从按钮启动身份验证过程。但是当“client.RequestUserAuthorization();”调用是在一个按钮内执行的,第二次没有触发任何内容......所以授权总是为空。