he podido obtener la versión 4.1.0.12182 DNOA, .Net 3.5 y Facebook para trabajar unos con otros mediante la creación de un FacebookAuthClient que se deriva fuera de el DotNetOpenAuth.OAuth2.WebServerClient. Una pequeña sorpresa que encontré es que si estás usando sesiones basadas en cookies, entonces tienes que acceder a la sesión antes de usar la funcionalidad OAuth. Por lo que puedo decir, esto se debe a que DNOA usa la ID de sesión como parámetro de estado y, si nunca se ha accedido a la sesión, puede cambiar entre las solicitudes. Esto causará un error de desajuste de los parámetros de estado cuando la respuesta regrese de 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);
}
}
}
Esto es sólo una aplicación de prueba lo que no hay control de errores, pero parece que funciona.
Editar Utilicé el paquete DotNetOpenAuth (unificado) NuGet para todo esto.
Editar Se ha añadido la llamada perdida .PostParameter a la creación del ClientCredentialApplicator.
Gracias por compartir a Josh. ¡Solo desearía que no se tratara de una recompensa TAN para sacar esto a la luz! (No dirigido a usted ni a nadie) –
'DotNetOpenAuth.OAuth2.ClientCredentialApplicator' dice que es un tipo, pero puedo usar' .NetworkCredential' de él. Pero luego recibo el error 400 de solicitud incorrecta. – BrunoLM
BrunoLM - Gracias por señalar que he actualizado el código con DotNetOpenAuth.OAuth2.ClientCredentialApplicator.PostParameter. Observe la parte PostParameter que faltaba –