Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
桌面Flickrj Java身份验证流_Java_Authentication_Flickr_Flickrj - Fatal编程技术网

桌面Flickrj Java身份验证流

桌面Flickrj Java身份验证流,java,authentication,flickr,flickrj,Java,Authentication,Flickr,Flickrj,我正在使用API登录flickr。对于只读访问,这很好,但当我需要写访问权限向照片添加标记时,我似乎无法正确地进行身份验证 据我所知,基本的身份验证流程 受到嘲笑 通过请求写访问的frob,返回一个URL 调用URL以接收flickr令牌 在所有后续请求中使用令牌 我的代码目前是 Flickr f = new Flickr(properties.getProperty(APIKEY),properties.getProperty(SECRET),t); System.out.println(f.

我正在使用API登录flickr。对于只读访问,这很好,但当我需要写访问权限向照片添加标记时,我似乎无法正确地进行身份验证

据我所知,基本的身份验证流程

  • 受到嘲笑
  • 通过请求写访问的frob,返回一个URL
  • 调用URL以接收flickr令牌
  • 在所有后续请求中使用令牌
  • 我的代码目前是

    Flickr f = new Flickr(properties.getProperty(APIKEY),properties.getProperty(SECRET),t);
    System.out.println(f.toString());
    
    // 1 get a frob
    AuthInterface authInterface = f.getAuthInterface();
    String frob = authInterface.getFrob();
    System.out.println("first frob "+frob);
    
    // 2 get a request URL
    URL url = f.getAuthInterface().buildAuthenticationUrl(Permission.WRITE,frob);
    System.out.println(url.toString());
    
    // 3 call the auth URL
    
    // 4 get token
    f.getAuthInterface().getToken(frob);
    
    如您所见-我被困在步骤3中了?

    我找到了此代码。步骤2之后,诀窍是让java桌面应用程序打开一个浏览器窗口和一个对话框。一旦用户通过浏览器登录,他们就会单击对话框,以便调用步骤4并检索令牌

    public boolean authenticate() {
        try {
            Flickr flickr = new Flickr("xx", "yy", new REST());
            Flickr.debugStream = false;
            requestContext = RequestContext.getRequestContext();
            authInterface  = flickr.getAuthInterface();
            frob           = authInterface.getFrob();
            token          = properties.getProperty(KEY_TOKEN);
            if (token == null) {
                authenticateViaWebBrowser();
            } else {
                auth = new Auth();
                auth.setToken(token);
            }
            requestContext.setAuth(auth);
            authenticated = true;
            return true;
        } catch (Exception ex) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, Bundle.getString("Auth.Error"));
        }
        return false;
    }
    
    private void authenticateViaWebBrowser() throws Exception {
        URL url = authInterface.buildAuthenticationUrl(Permission.DELETE, frob);
        LargeMessagesDialog dlg = new LargeMessagesDialog(Bundle.getString("Auth.Info.GetToken.Browse", url.toExternalForm()));
        dlg.setVisible(true);
        Desktop.getDesktop().browse(url.toURI());
        JOptionPane.showMessageDialog(null, Bundle.getString("Auth.Info.GetToken.Confirm"));
        auth = authInterface.getToken(frob);
        token = auth.getToken();
        properties.setProperty(KEY_TOKEN, token);
    }
    

    我有一个错误,代码没有授予我读取权限。。我不知道为什么…
    但除此之外我还有一只青蛙和一个代币。。而且很有效

            // Step 1) Get Frob
            AuthInterface ai = f.getAuthInterface();        
            String frob = ai.getFrob();
            System.out.println("frob: "+frob); //--> It Works !!
    
            // Step 2) URL With Permissions
            URL uc = ai.buildAuthenticationUrl(Permission.READ, frob);
            String request = uc.toExternalForm();
            uc.openConnection();
    
            // Step 3) Call URL
            System.out.println(request);
            URI uri = new URI(request);
            Desktop desktop = null;
            if (Desktop.isDesktopSupported()) 
            {
                desktop = Desktop.getDesktop();
            }
    
            if (desktop != null) 
            {
                desktop.browse(uri);   // Open Explorer to Confirm        
            }
            // Sleep until accepted in the explorer. After Press enter in Console
            BufferedReader infile = new BufferedReader ( new InputStreamReader (System.in) );
            String line = infile.readLine();
    
            // Step 4) Get a token
            Auth atoken = ai.getToken(frob); // Get a Token with a frob
            String stoken = atoken.getToken(); // Get a token like String
            System.out.println("Token: "+stoken);
            Auth au = ai.checkToken(stoken);   // Check token
    
            RequestContext.getRequestContext().setAuth(au);
    

    如果你有新问题,请点击按钮提问。