Facebook with DotNetOpenAuth 4.1.0.12182



我正试图使用DotNetOpenAuth 4.1.0.12182为Facebook和Windows LiveId创建用户登录

然而,下载中的示例使用了当前版本中不存在的DotNetOpenAuth.ApplicationBlockDotNetOpenAuth.ApplicationBlock.Facebook

取而代之的是包含FacebookClientWindowsLiveClientDotNetOpenAuth.AspNet.Clients命名空间,但是我找不到任何关于如何使用它们的示例。

是否存在任何示例或文档

我已经能够通过创建一个从DotNetOpenAuth.OAuth2.WebServerClient派生的FacebookAuthClient来让DNOA版本4.1.0.12182、.Net 3.5和Facebook相互协作。我发现的一个小问题是,如果你使用基于cookie的会话,那么在使用OAuth功能之前,你必须访问该会话。据我所知,这是因为DNOA使用会话ID作为状态参数,如果会话从未被访问过,它可以在请求之间更改。当Facebook回复时,这将导致状态参数不匹配错误。

FacebookAuthClient:

public class FacebookAuthClient : DotNetOpenAuth.OAuth2.WebServerClient
{
    private static readonly DotNetOpenAuth.OAuth2.AuthorizationServerDescription Description = new DotNetOpenAuth.OAuth2.AuthorizationServerDescription
    {
        TokenEndpoint = new Uri("https://graph.facebook.com/oauth/access_token"),
        AuthorzationEndpoint = new Uri("https://graph.facebook.com/oauth/authorize")    
    };
    public static readonly string [] ScopeNeeded = { "publish_stream" };
    public FacebookAuthClient()
       : base(Description)
    {
    }
}

Facebook.aspx。cs:

public partial class FacebookPage : System.Web.UI.Page
{
    private FacebookAuthClient _client = new FacebookAuthClient
    {
        ClientIdentifier = ConfigurationManager.AppSettings["FBClientId"], //The FB app's Id
        ClientCredentialApplicator = DotNetOpenAuth.OAuth2.ClientCredentialApplicator.PostParameter(ConfigurationManager.AppSettings["FBClientSecret"]) // The FB app's secret
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        DotNetOpenAuth.OAuth2.IAuthorizationState auth = _client.ProcessUserAuthorization();
        if (_auth == null)
        {
            // Kick off authorization request with the required scope info
            client.RequestUserAuthorization(FacebookAuthClient.ScopeNeeded);
        }
    }
}

这只是一个测试应用程序,所以没有错误处理,但它似乎可以工作。

编辑我使用了DotNetOpenAuth(统一)NuGet包来完成这一切。

编辑添加了对创建ClientCredentialApplicator的缺少.PostParameter调用。

您需要使用DNOA的ctp 3.5版本。版本4+已经与OAuth 2的后期草案一起工作,然后Facebook使用。

你可以在所有者GitHub上找到它:https://github.com/AArnott/dotnetopenid

最新更新