Java 春季保安及;FacebookOAuth2.0与GraphAPI的集成
请至少提供伪应用程序上下文和控制器/过滤器,用于验证和/或自动注册Facebook用户 这个链接:不会做。事实上,我会给任何将其作为答案发布的人加上负号。我花了两个小时在这件事上,但我没有让它发挥作用。在这次努力之后,我比平时更加大胆,也更加愚蠢:-( 我真的希望看到facebook connect的解决方案,并将facebook JavaScript API的使用限制在绝对最低限度。 以下链接显示了我需要的内容: 请只发布这个问题的代码。我已经得到了我能处理的所有建议 更新 我有servlet解决方案,如果有人感兴趣,请在此处发布答案:Java 春季保安及;FacebookOAuth2.0与GraphAPI的集成,java,facebook,spring,facebook-graph-api,spring-security,Java,Facebook,Spring,Facebook Graph Api,Spring Security,请至少提供伪应用程序上下文和控制器/过滤器,用于验证和/或自动注册Facebook用户 这个链接:不会做。事实上,我会给任何将其作为答案发布的人加上负号。我花了两个小时在这件事上,但我没有让它发挥作用。在这次努力之后,我比平时更加大胆,也更加愚蠢:-( 我真的希望看到facebook connect的解决方案,并将facebook JavaScript API的使用限制在绝对最低限度。 以下链接显示了我需要的内容: 请只发布这个问题的代码。我已经得到了我能处理的所有建议 更新 我有servle
事实上,我昨晚刚刚完成了Facebook Graph API身份验证的非javascript实现。我在a**中经历了巨大的痛苦,但它运行良好 我使用了您在上面发布的链接中的示例作为起点,也使用了其中的代码作为起点。我必须编写自己的FaceBookGraphHauthenticationProvider和FaceBookGraphHauthenticationFilter的实现,但现在它按照我希望的方式工作 您需要创建这两个文件的实现,将过滤器放入过滤器链中,并创建一个Spring Security UserDetails服务的实现,提供商可以使用该服务管理您的用户帐户信息。我在家里的机器上有一些代码,如果您愿意,我可以通过电子邮件发送给您 以下是使身份验证正常工作所需的步骤:
我希望这至少有一点帮助。我建议使用Spring社交应用程序开始发布状态、图片、墙上的东西等。这将是一个开始了解FB Spring交互的好地方。以下是facebook OAuth 2.0的MVC实现 代码是C语言的,希望它与java的相似性能帮助您解决这个问题 控制器(入口点):控制器(在MVC中)是代码中的一个点,在有人单击登录链接后,控件到达该点
public ActionResult Authenticate()
{
var oauthFacebook = new FacebookOAuth();
if (Request["code"] == null)
{
//Redirect the user to Facebook for authorization.
Response.Redirect(oauthFacebook.AuthorizationLinkGet());
}
else
{
//Get the access token and secret.
oauthFacebook.AccessTokenGet(Request["code"]);
if (oauthFacebook.Token.Length > 0)
{
//We can now make our api calls
var user = oauthFacebook.GetAttributes();
}
}
}
FacebookOAuth类
public class FacebookOAuth : Oauth
{
public FacebookOAuth()
{
Authorize = "https://graph.facebook.com/oauth/authorize";
AccessToken = "https://graph.facebook.com/oauth/access_token";
CallbackUrl = "http://<YourURLHere>/Authenticate";
AttributesBaseUrl = "https://graph.facebook.com/me/?access_token=";
ConsumerKey = ConfigurationManager.AppSettings["FacebookConsumerKey"];//Ur Consumer Key goes here
ConsumerSecret = ConfigurationManager.AppSettings["FacebookConsumerSecret"];//Ur Consumer secret goes here
Provider = "Facebook";
}
public override string AuthorizationLinkGet()
{
return
string.Format(
"{0}?client_id={1}&redirect_uri={2}&scope=email,user_education_history,user_location,user_hometown",
Authorize, ConsumerKey, CallbackUrl);
}
public User GetAttributes()
{
string attributesUrl = string.Format("{0}{1}", AttributesBaseUrl, Token);
string attributes = WebRequest(Method.Get, attributesUrl, String.Empty);
var FacebookUser = new JavaScriptSerializer().Deserialize<FacebookUser>(attributes);
return new User()
{
FirstName = FacebookUser.first_name,
MiddleName = FacebookUser.middle_name,
LastName = FacebookUser.last_name,
Locale = FacebookUser.locale,
UserEmail = FacebookUser.email,
AuthProvider = Provider,
AuthToken=Token
};
}
}
你能解释一下你当前遇到的错误吗?更多关于如何/为什么这不起作用的信息?我有一个完整的facebook oauth 2.0实现,没有任何javascript…但是它在.net mvc框架中使用C#你想看看吗?@Mat Banik:Iv给出了我当前使用的代码转储…看一看,让我看看知道它是否能使你成功sense@Mat我已经使用spring security和oauth实现了一个服务器端解决方案。参见Mulki,当前规范显示访问令牌响应为json。您的实现显示它作为querystring参数返回。这只是规范和facebook实现之间的差异吗?Mulki,是否考虑了此方法d OAuth 2?我可以使用类似的过程通过FB对用户进行身份验证吗?嗨..我有一些问题…你能通过电子邮件给我一些代码示例吗?我想将我现有的身份验证(使用spring security)与Facebook Connect(或登录)集成在一起…如果你不介意,请发电子邮件给我danielrobertusp@gmail.comHi丹尼尔…不幸的是,这个项目已经过时了:(如果你有一些具体的问题,我很乐意回答他们…谢谢你的回答..如果你不介意,请访问我的问题
public abstract class Oauth
{
#region Method enum
public enum Method
{
Get,
Post,
Delete
} ;
#endregion
protected string AccessToken;
protected string AttributesBaseUrl;
protected string Authorize;
protected string CallbackUrl;
protected string ConsumerKey;
protected string ConsumerSecret;
public string Provider { get; protected set; }
public string Token { get; set; }
public virtual string AuthorizationLinkGet()
{
return
string.Format(
"{0}?client_id={1}&redirect_uri={2}&scope=publish_stream,email,user_education_history,user_location",
Authorize, ConsumerKey, CallbackUrl);
}
public void AccessTokenGet(string authToken)
{
Token = authToken;
string accessTokenUrl = string.Format("{0}?client_id={1}&redirect_uri={2}&client_secret={3}&code={4}",
AccessToken, ConsumerKey, CallbackUrl, ConsumerSecret, authToken);
string response = WebRequest(Method.Get, accessTokenUrl, String.Empty);
if (response.Length > 0)
{
//Store the returned access_token
NameValueCollection qs = HttpUtility.ParseQueryString(response);
if (qs["access_token"] != null)
{
Token = qs["access_token"];
}
}
}
public string WebRequest(Method method, string url, string postData)
{
StreamWriter requestWriter;
string responseData = string.Empty;
var webRequest = System.Net.WebRequest.Create(url) as HttpWebRequest;
if (webRequest != null)
{
webRequest.Method = method.ToString();
webRequest.ServicePoint.Expect100Continue = false;
webRequest.Timeout = 20000;
if (method == Method.Post)
{
webRequest.ContentType = "application/x-www-form-urlencoded";
//POST the data.
requestWriter = new StreamWriter(webRequest.GetRequestStream());
try
{
requestWriter.Write(postData);
}
finally
{
requestWriter.Close();
}
}
responseData = WebResponseGet(webRequest);
}
return responseData;
}
public string WebResponseGet(HttpWebRequest webRequest)
{
StreamReader responseReader = null;
string responseData;
try
{
responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream());
responseData = responseReader.ReadToEnd();
}
finally
{
if (webRequest != null) webRequest.GetResponse().GetResponseStream().Close();
if (responseReader != null) responseReader.Close();
}
return responseData;
}
}