【问题标题】:Flickr auth with scribe-java providing a callback urlFlickr auth 与 scribe-java 提供回调 url
【发布时间】:2014-08-14 21:12:06
【问题描述】:

我必须在 Flickr 上授权用户,所以我在 Flickr 上注册了我的应用程序,并硬编码了 key、secret 和 callbackUrl 的值。 现在,我正在使用 scribe 库,而不是强制用户复制并提交验证程序,我想从回调 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

看来redirect没有frob参数..但是回调是正确的,并且在Flick应用程序上正确注册..有人可以帮助我吗?

谢谢!

【问题讨论】:

    标签: java servlets oauth flickr scribe


    【解决方案1】:

    我目前正在使用带有 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 的原始 requestToken 来获取你的 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);       
    

    【讨论】:

    • 绝对正确。我错过了 OAuthConstants.Verifier 的事实。非常感谢!!
    猜你喜欢
    • 1970-01-01
    • 2015-05-15
    • 2011-10-06
    • 1970-01-01
    • 1970-01-01
    • 2022-11-19
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多