2017-02-21 5 views
0

Ich kodiere eine Konsole C# App, die täglich unter Windows 7 ausgeführt wird. Es gibt keine Benutzerinteraktion.Gibt es eine Möglichkeit, ein Box-Aktualisierungstoken programmgesteuert zu erneuern?

Die App lädt einfach eine CSV in Box, mit OAuth2 und der neuesten API/SDK.

Ich hoffe, schließlich eine Unternehmens-ID zu verwenden, aber ich mache dies innerhalb einer Unternehmens-Website, und es ist schwierig, die Erlaubnis zu erhalten, es zu verwenden. Im Moment habe ich einfach eine App mit meinem Login erstellt, die App autorisiert und manuell & mein Refresh-Token erhalten.

Ich habe Probleme herauszufinden, wie das Aktualisierungstoken in C# verwalten. Ich sehe einige Objekte in Java, die es sehr einfach aussehen lassen, aber ich sehe keine entsprechenden C# -Objekte? Muss ich meine Anwendung nach 60 Tagen manuell über die Box-Login-Webseite erneut autorisieren? Wenn nicht, was muss ich tun, um zu erkennen, dass sich mein Aktualisierungstoken geändert hat, und wie kann ich das neue abrufen?

Ich habe auch einige Probleme, weil es scheint, als ob viele Objekte mit der neuesten API geändert wurden, und wenn ich nach Code suche, ist es vor ein paar Jahren und es ist jetzt veraltet.

+0

Hier kommen Ihre Programmierfähigkeiten ins Spiel. Wenn es keine API Extension-Methoden oder Add-Ons für mich gibt, dann scheint es, als würden Sie Ihre eigene Logik oder Klasse programmieren, um so etwas zu handhaben. meiner eigenen Meinung nach ... – MethodMan

+0

Ich fragte, ob ich Teil der API fehlt - ein Ereignis, das ich hören muss, eine geänderte Rückgabeeigenschaft usw. Natürlich kann ich meinen Benutzernamen und mein Passwort nicht speichern, um an eine Box zu übergeben Login-Webseite für eine nicht überwachte App. – Quicksilver

+0

Wenn die App ist eine Konsole App .. Sie können den Benutzernamen und das Passwort in der App.Config-Datei speichern und haben den Abschnitt Verschlüsselt haben Sie versucht, dass – MethodMan

Antwort

1

Ich fand es heraus, obwohl die Lösung eine Art von Cligey scheint.

Grundsätzlich müssen Sie immer bereit sein, eine weitere Authentifizierungssitzung zu erstellen, falls erforderlich. Sie erstellen eine Authentifizierungssitzung, prüfen, ob sie gültig ist. Ist dies nicht der Fall, erstellen Sie eine zweite Authentifizierungssitzung. Sie würden durch Abfangen zwei Ereignisse für diesen Test:

boxClient.Auth.SessionAuthenticated += Auth_SessionAuthenticated; 
boxClient.Auth.SessionInvalidated += Auth_SessionInvalidated; 

Für mich scheint dumm - ich bin mit meiner app einmal/Tag, also ich will nur meine Token jedes Mal aktualisieren. Also erstelle ich immer zwei:

 var config = new BoxConfig(CLIENT_ID, CLIENT_SECRET, new Uri(RedirectURI)); 

     // Prior to this code snippet, I grabbed my starter access & refresh tokens from where I stored them in our db. 
     var auth = new OAuthSession(InitialToken, RefreshToken, 3600, "bearer"); 
     var client = new BoxClient(config, auth); 

     /// Try to refresh the access token 
     var realAuth = await client.Auth.RefreshAccessTokenAsync(auth.AccessToken); 
     /// Create the client again 
     var realClient = new BoxClient(config, realAuth); 

     //going to just log/update tokens every time. This only runs 1x/day, so should be no harm. 
     LogNewTokens(realAuth.AccessToken, realAuth.RefreshToken); 

Und dann benutze ich "realClient" für den Rest der Box Anfragen.

Im Rückblick wäre es wahrscheinlich schneller für mich gewesen, nur Code für das Posten dieser Anfragen direkt in Box zu heben und den zurückgegebenen JSON zu analysieren. Ich erwartete, ein nettes Wrapper-Objekt zu haben, das automatisch meine Tokens für mich aktualisiert, eine Verbindung herstellt und die neuen einfach verfügbar macht. Ich denke, sie hätten mit dem C# SDK einen besseren Job machen können.

Verwandte Themen