2017-02-21 25 views
0

Я кодирую консольное приложение C#, которое будет работать ежедневно в Windows 7. Взаимодействие с пользователем отсутствует.Есть ли способ программно обновить токен обновления обновления?

Приложение просто загружает CSV в Box, используя OAuth2 и новейший API/SDK.

Я надеюсь в конечном итоге использовать идентификатор предприятия, но я делаю это на корпоративном сайте, и получить разрешение на его использование сложно. Так что пока я просто создал приложение с моим логином, авторизованным приложением и получил вручную & сохраненный токен обновления.

У меня возникли проблемы с выяснением того, как управлять токеном обновления на C#. Я вижу некоторые объекты в java, которые делают его очень легким, но я не вижу соответствующих объектов C#? Должен ли я вручную повторно авторизировать свое приложение через 60 дней с помощью веб-страницы входа в Box? Если нет, что мне нужно сделать, чтобы обнаружить, что мой токен обновления изменился, и как я могу получить новый?

У меня также есть некоторые проблемы, потому что кажется, что много объектов изменилось с помощью новейшего API, и всякий раз, когда я ищу код, это от пары лет назад, и теперь оно устарело.

+0

Это то, где ваши навыки программирования ударяются .. если нет методов API-расширений API или надстройки для меня, это то, где, казалось бы, вы бы закодировали свою собственную логику или класс, чтобы обрабатывать что-то вроде этого .. по-моему ... – MethodMan

+0

Я спросил, не хватает ли я части API - события, которое мне нужно для прослушивания, измененного свойства возврата и т. д. Очевидно, я не могу сохранить свое имя пользователя и пароль для передачи в ящик login webpage для неконтролируемого приложения. – Quicksilver

+0

, если приложение является консольным приложением .. вы можете сохранить имя пользователя и пароль в файле App.Config и иметь этот раздел. Зашифрованные вы пробовали, что – MethodMan

ответ

1

Я понял это, хотя решение кажется довольно clugey.

В принципе, вы всегда должны быть готовы к созданию еще одной сеанса аутентификации, если это необходимо. Вы создаете один сеанс аутентификации, смотрите, действительно ли он, и если нет, создайте второй, который вы используете для реального. Вы бы проверить это, захватывая два события:

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

Мне это кажется глупым - я бегу мое приложение один раз/день, так что я просто хочу, чтобы обновить мои жетоны каждый раз. Поэтому я всегда создаю два:

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

И затем я использую «realClient» для остальных запросов в ящике.

В ретроспективе мне, вероятно, было бы быстрее снять код для отправки этих запросов непосредственно в Box и разбора JSON. Я ожидал, что у меня будет хороший объект-обертка, который автоматически обновит мои токены для меня, подключится и сделает новые легко доступными. Я думаю, что они могли бы лучше работать с C# SDK.