Mir wurde der Zugriff (Zusammenarbeit) in einem Ordner gewährt. Ich muss täglich auf den Ordner zugreifen und Dateien von ihm abrufen. Derzeit läuft das Entwickler-Token, das ich generiere, in 1 Stunde ab. Gibt es eine Möglichkeit, die authorization code
ohne das erste Bein zu bekommen, die eine Benutzeroberfläche benötigt. Auf diese Weise kann ich den Zugriff auf Dateien jedes Mal aktualisieren, wenn ich Dateien abrufe.Wie bekomme ich ein Zugriffs-Token ohne die Autorisierungsseite der Box?
Antwort
Sie sollten das Token aktualisieren können, ohne einen Autorisierungscode zu erhalten. Wenn das Zugriffstoken zurückgesendet wird, wird auch ein Aktualisierungstoken an Sie ausgegeben.
{
"access_token": "T9cE5asGnuyYCCqIZFoWjFHvNbvVqHjl",
"expires_in": 3600,
"restricted_to": [],
"token_type": "bearer",
"refresh_token": "J7rxTiWOHMoSC1isKZKBZWizoRXjkQzig5C6jFgCVJ9bUnsUfGMinKBDLZWP9BgR"
}
Sie sollten diese Refresh speichern Token irgendwo sicher (Schlüsselanhänger, verschlüsselte Datenspeicher, so ähnlich) und es verwenden, um die Sitzung zu aktualisieren, wenn es abläuft.
Sie können feststellen, dass die Sitzung abgelaufen ist, wenn Sie eine 401 nicht autorisierte Antwort von Box für eine API-Anfrage erhalten UND Sie einen WWW-Authenticate-Header mit dem Wert Bearer realm = sehen.
Der Fluss soll wie etwas aussehen:
1) in Box anmelden und einen Berechtigungscode
2) Tauschen Sie den Autorisierungscode für ein Zugriffstoken und Aktualisierungs-Token-Paar (das muss erhalten nur getan werden Bewahren Sie einmal!)
3) die Aktualisierungs-Token
4) beginnen Sie machen Anfragen mit der API
5) Wenn ein 401 Unauthorized ist mit einem WWW-Authenticate-Header in einer API-Antwort, die Ausgabe eine www-form-urlencoded POST-Anforderung an Box wie folgt erhalten:
curl https://www.box.com/api/oauth2/token \ -d 'grant_type=refresh_token&refresh_token={valid refresh token}&client_id={your_client_id}&client_secret={your_client_secret}' \ -X POST
Wenn dies gelingt, werden Sie ein neues Zugriffstoken ausgestellt und Aktualisierung des Token-Paars Speichern Sie das neue Aktualisierungstoken, tauschen Sie das alte Zugriffstoken für das neue aus und setzen Sie Ihre API-Aufrufe von Ihrem vorherigen fehlgeschlagenen Aufruf fort.
Hoffe, dass hilft!
Gefunden ein schönes Paket, das meine Frage beantwortet. :) https://github.com/sookasa/box.py
Nach Sikppy Ta
Sie können Ihre erste Token in der Datei und mit der Refresh-Mechanismus über eine solche Datei speichern.
Hier ist Beispiel
static String tokenUrl = "https://app.box.com/api/oauth2/token";
public String getTokenFromFile() throws Exception {
String path = this.tokenFilePath;
File file = new File(path);
String line = "", token = "";
try {
BufferedReader br = new BufferedReader(new FileReader(file));
while ((line = br.readLine()) != null) {
token = line;
}
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String newRefleshToken = refleshToken(token);
String accessToken = newRefleshToken.substring(17, 49);
return accessToken;
}
Für refreshToken, müssen Sie die Httpclient
private String refleshToken(String tokencode) throws Exception {
String accessToken = tokencode.substring(17, 49);
String refleshToken = tokencode.substring(105, 169);
tokencode = HttpURLConnectionExample.refreshToken(refleshToken);
writeTokenToTextFile(tokencode);
return tokencode;
}
public static String refreshToken(String newToken) throws Exception {
String urlParameters = "grant_type=refresh_token&refresh_token=" + newToken + "&client_id=" + client_id + "&client_secret=" + client_secret;
String result = sendPost(tokenUrl, urlParameters);
return result;
}
Lassen Sie mich die Methode sendPost zeigen
String sendPost(String url, String urlParameters) throws Exception {
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
//add reuqest header
con.setRequestMethod("POST");
con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(
new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
return response.toString();
}
Ich glaube nicht, das beantwortet die Frage OPs . Sie machen hier eine Annahme, dass er ein Aktualisierungs-Token hat, das er nicht hat, nur das Entwickler-Token, die Client-ID und das Geheimnis. Es scheint keine Möglichkeit zu bestehen, die Entwickler-Token durch diese oauth2-Aufrufe zu aktualisieren. – alanwill