2010-07-29 6 views
2

Я использую API Flickrj для входа в flickr. Для READ только получить доступ к его штрафу, но я не могу показаться правильно auth, когда мне нужен доступ WRITE для добавления тегов к фотографиям.Desktop Flickrj Java Authentication Flow

Как я понимаю, основной поток аутентификации

  1. Получить Frob
  2. Pass, который Frob запрашивающий доступ WRITE, это возвращает URL.
  3. Вызвать URL Получать Flickr токенов
  4. Используйте маркер во всех последующих запросах

Мой код в настоящее время

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 ?

ответ

1

Я нашел этот код de.elmar_baumann.jpt.plugin.flickrupload.Authorization. После шага 2 трюк заключается в том, чтобы приложение рабочего стола java открывало окно браузера и диалог. После того, как пользователь выполнил вход через браузер, они нажимают на диалоговое окно, чтобы можно было вызывать шаг четыре и извлеченный токен.

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); 
} 
0

У меня есть ошибка, код не дал мне ни одного разрешения на чтение .. И я не знаю, почему ...
Но в противном случае у меня есть лягушка и токен .. И это работает !!

 // 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); 
+0

Если у вас есть новый вопрос, обратитесь к нему, нажав кнопку [Ask Question] (http://stackoverflow.com/questions/ask). – oers