sono stato in grado di ottenere la versione DNOA 4.1.0.12182, Net 3.5 e Facebook per lavorare con l'altro creando un FacebookAuthClient che deriva al largo di il DotNetOpenAuth.OAuth2.WebServerClient. Una piccola cosa che ho trovato è che se si utilizzano sessioni basate su cookie, è necessario accedere alla sessione prima di utilizzare la funzionalità OAuth. Da quello che posso dire questo è perché DNOA utilizza l'ID sessione come parametro di stato e se la sessione non è mai stata aperta può cambiare tra le richieste. Ciò causerà un errore di mancata corrispondenza dei parametri di stato quando la risposta ritorna da 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);
}
}
}
Questa è solo un'applicazione di test quindi non c'è la gestione degli errori, ma sembra funzionare.
Edit ho usato la (unificato) Pacchetto DotNetOpenAuth NuGet per tutto questo.
Modifica Aggiunto mancante .PostParameter chiamare per la creazione del ClientCredentialApplicator.
fonte
2012-07-25 19:12:58
Grazie per aver condiviso Josh - Spero solo che non abbia coinvolto una generosità SO per portare questo alla luce! (Non rivolto a te oa nessuno) –
'DotNetOpenAuth.OAuth2.ClientCredentialApplicator' dice che è un tipo, ma posso usare' .NetworkCredential' da esso. Ma poi ottengo la richiesta errata di errore 400. – BrunoLM
BrunoLM - Grazie per aver segnalato che ho aggiornato il codice con DotNetOpenAuth.OAuth2.ClientCredentialApplicator.PostParameter. Nota la parte PostParameter che mancava –