桌面Flickrj Java身份验证流
我正在使用API登录flickr。对于只读访问,这很好,但当我需要写访问权限向照片添加标记时,我似乎无法正确地进行身份验证 据我所知,基本的身份验证流程桌面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.
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);
如果你有新问题,请点击按钮提问。