我必须在Flickr上授权用户,所以我已经在Flickr上注册了我的应用程序,并为密钥、机密和callbackUrl注册了硬编码值。现在,我使用划线程序库,而不是强制用户复制和提交验证器,我想从回调url中获得参数frob。我全部用Java实现,使用servlet会话来捕获重定向。下面是代码:
public class FlickrAuth extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
OAuthService service = new ServiceBuilder().
provider(FlickrApi.class)
.apiKey(FLICKR_KEY)
.apiSecret(FLICKR_SECRET)
.callback("https://something.com/flickr")
.build();
Token requestToken = service.getRequestToken();
String authorizationUrl = service.getAuthorizationUrl(requestToken);
String url = authorizationUrl + "&perms=read";
//Make a request to the url
response.sendRedirect(url);
}
servlet回调是以这种方式管理的:
public class FlickrCallback extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String code = request.getParameter("frob");
OAuthService service = new ServiceBuilder().
provider(FlickrApi.class)
.apiKey(FLICKR_KEY)
.apiSecret(FLICKR_SECRET)
.callback(https://something.com/flickr)
.build();
Token requestToken = service.getRequestToken();
Verifier verifier = new Verifier(code);
Token accessToken = service.getAccessToken(requestToken, verifier);
}
当我试图构建验证器时,服务器会引发此异常:
java.lang.IllegalArgumentException: Must provide a valid string as verifier
似乎重定向没有frob参数。但是回调是正确的,并在Flick应用程序上正确注册。有人能帮我吗?
谢谢!
发布于 2014-08-14 21:44:08
我目前使用了Flickr OAuth的Scribe,在比较您所拥有的内容时,我注意到了以下几个问题:
1) frob
在旧的身份验证流中使用,而不是在OAuth中使用。在OAuth流中,需要在回调参数中查找"oauth_verifier“。
//change
String code = request.getParameter("frob");
//to
String code = request.getParameter(OAuthConstants.VERIFIER); //oauth_verifier
2)您应该使用来自OAuthAuth的原始OAuthAuth来获取accessToken,而不是获得一个新的requestToken
public class FlickrAuth extends HttpServlet {
...
//after you get the initial requestToken, save it (e.g. session, database,..)
Token requestToken = service.getRequestToken();
request.getSession().setAttribute("some key", requestToken);
public class FlickrCallback extends HttpServlet {
...
//later you will need that original requestToken
Token savedRequestToken = request.getSession().getAttribute("some key");
Verifier verifier = new Verifier(code); //from request param oauth_verifier
Token accessToken = service.getAccessToken(savedRequestToken, verifier);
https://stackoverflow.com/questions/25317682
复制相似问题