javatomcat:如何正确使用JOAuth

javatomcat:如何正确使用JOAuth,java,tomcat,servlets,joauth,Java,Tomcat,Servlets,Joauth,我试图按照上的说明获取facebook访问令牌,但没有成功 我做了以下工作: 将这些行添加到WEB-INF/WEB.xml <servlet> <description>An OAuth Servlet Controller</description> <display-name>OAuthServlet</display-name> <servlet-name>OAuthServlet</servlet-

我试图按照上的说明获取facebook访问令牌,但没有成功

我做了以下工作:

将这些行添加到WEB-INF/WEB.xml

<servlet>
  <description>An OAuth Servlet Controller</description>
  <display-name>OAuthServlet</display-name>
  <servlet-name>OAuthServlet</servlet-name>
  <servlet-class>com.neurologic.oauth.servlet.OAuthServlet</servlet-class>
  <init-param>
     <param-name>config</param-name>
     <param-value>/WEB-INF/oauth-config.xml</param-value>
  </init-param>
  <load-on-startup>3</load-on-startup>
 </servlet>
<servlet-mapping>
 <servlet-name>OAuthServlet</servlet-name>
 <url-pattern>/oauth/*</url-pattern>
</servlet-mapping>

OAuth Servlet控制器
OAuthServlet
OAuthServlet
com.neurologic.oauth.servlet.OAuthServlet
配置
/WEB-INF/oauth-config.xml
3.
OAuthServlet
/非统组织/*
使用以下行创建WEB-INF/oauth-config.xml: (将app key和secret重命名为
,我得到的输出是
null
,这意味着该属性不存在

没有错误,但我仍然没有得到正确的令牌

我是tomcat和servlet配置的新手,所以我可能错过了一些东西

我错过了什么


非常感谢!

好的,我以前从未回答过的问题(因为我假设用户知道OAuth授权)是OAuth授权流的启动

首先,按照规定的OAuth流程,我将根据所记录的内容向您展示如何在java中完成它

要使此工作流正常工作,您需要请求授权代码(通过OAuth规范第4.1.1段中提到的授权请求)

该方法从
OAuth2Consumer
类调用:

public String generateRequestAuthorizationUrl(ResponseType responseType, String redirectUri, String state, String scopeDelimiter, String... scope) throws OAuthException {
记住
Facebook的scopeDelimiter
是一个逗号
responseType
responseType。code
scope
是Facebook认为的权限

一个完整的例子是:

String client_id = "<APP_ID>";
String client_secret = "<CLIENT_SECRET>";
String redirectUrl = "http://127.0.0.1:5080/Red5FacebookAuth/oauth/oauth_redirect"; 
OAuth2ServiceProvider provider = new OAuth2ServiceProvider("https://graph.facebook.com/oauth/authorize", "https://graph.facebook.com/oauth/access_token");
OAuth2Consumer consumer = new OAuth2Consumer(client_id, client_secret, provider);


//Using HttpServletResponse (but you can kickstart it through an Action/Controller/etc.
response.sendRedirect(consumer.generateRequestAuthorizationUrl(ResponseType.CODE, redirectUrl, null, ",", (String[])null)); //where null is the scope array,
String client_id=”“;
字符串client_secret=“”;
字符串重定向URL=”http://127.0.0.1:5080/Red5FacebookAuth/oauth/oauth_redirect"; 
OAuth2ServiceProvider提供程序=新的OAuth2ServiceProvider(“https://graph.facebook.com/oauth/authorize", "https://graph.facebook.com/oauth/access_token");
OAuth2Consumer consumer=新的OAuth2Consumer(客户端id、客户端机密、提供者);
//使用HttpServletResponse(但您可以通过Action/Controller/etc启动它)。
response.sendRedirect(consumer.generateRequestAuthorizationUrl(ResponseType.CODE,redirectUrl,null,,,(String[])null));//其中null是作用域数组,
当facebook进行HTTP重定向时,这将依次调用您的
com.facebook.facebook OAuthService.processReceivedAuthorization
。然后,
code
就是您从facebook收到的授权码

希望这有帮助

PSFacebook在请求访问令牌时不会对您的页面进行HTTP重定向,因此您需要手动将其存储在会话中而不是JOAuth中(它使用OAuth 2 draft 0)。如果其他OAuth 2服务提供商在请求访问令牌后使用HTTP重定向,不存储访问令牌,
OAuth2服务将自动为您执行此操作。

PPS使用任何日志框架查看日志


祝你好运,让我知道发生了什么!

谢谢你的反馈,我正忙着回答这个问题。顺便说一句。如果你检查了谷歌代码,JOAuth的v1.1版本就出来了。谢谢你提供详细信息。但是,我在执行上述代码时遇到一个错误。错误是:找不到元素“oauth config”的声明。[2]。你能告诉我为什么会出现这个错误吗?这是我的荣幸:)顺便说一句,你是如何从你那里听说JOAuth的?:)顺便说一句,谢谢你提供了完整的信息,这样我才能真正理解我在做什么,而不仅仅是复制/粘贴代码。啊!:)我忘了我对那个问题作了评论。和JOAuth玩得开心!顺便说一句,如果您知道自己在做什么(微调),那么复制/粘贴代码是可以的。而且,在你的代码上保留我的名字似乎是你在剽窃它……哈哈!仍在尝试正确使用您的工具。请让我知道您是否可以提供有关以下问题的任何信息来启发我:
<%@page import="com.neurologic.oauth.util.Globals"%>

<% 
String accessToken =     (String)request.getSession().getAttribute(Globals.SESSION_OAUTH2_ACCESS_TOKEN); //For OAuth 2 access token.
%>
<%= accessToken %>
public String generateRequestAuthorizationUrl(ResponseType responseType, String redirectUri, String state, String scopeDelimiter, String... scope) throws OAuthException {
String client_id = "<APP_ID>";
String client_secret = "<CLIENT_SECRET>";
String redirectUrl = "http://127.0.0.1:5080/Red5FacebookAuth/oauth/oauth_redirect"; 
OAuth2ServiceProvider provider = new OAuth2ServiceProvider("https://graph.facebook.com/oauth/authorize", "https://graph.facebook.com/oauth/access_token");
OAuth2Consumer consumer = new OAuth2Consumer(client_id, client_secret, provider);


//Using HttpServletResponse (but you can kickstart it through an Action/Controller/etc.
response.sendRedirect(consumer.generateRequestAuthorizationUrl(ResponseType.CODE, redirectUrl, null, ",", (String[])null)); //where null is the scope array,