2016-09-13 2 views
2

Моя общая цель - иметь возможность автоматически загружать ежедневно report using the bing ads API. Для этого мне нужно authenticate with OAuth (старый метод PasswordAuthentication не работает, потому что у меня есть новая учетная запись Microsoft). Я прошел через «Ресурсный поток авторизационного кода» вручную и успешно разрешил себя. Проблема заключается в том:Microsoft Live Connect для рекламы Bing OAuth 2.0 без браузера

  • маркер действителен только в течение 1 часа
  • когда истекает срок действия маркера, процесс требует, чтобы пользователь вручную Войти с помощью веб-браузер и повторно позволить приложению доступ

Here's an example desktop app using OAuth

знает ли кто-либо

  • более достойный способ аутентификации?
  • или способ обхода взаимодействия с пользователем?

РЕШЕНИЕ:

Как отметил @eric городской нужно только разрешить вручную, один раз. после этого токен обновления будет делать. (Не совсем очевидно, просто глядя на пример настольного приложения!)

я написал класс, чтобы иметь дело со всеми OAuth вещи и сохраняются токен обновления в файл

public class OAuthRefreshToken { 
    private static String refreshTokenFileName = "./bingAdsRefreshToken.txt"; 
    private static String ClientId = "XXXXX"; 
    private final OAuthDesktopMobileAuthCodeGrant oAuthDesktopMobileAuthCodeGrant = new OAuthDesktopMobileAuthCodeGrant(ClientId); 
    private String refreshToken; 

    public OAuthRefreshToken() { 
     oAuthDesktopMobileAuthCodeGrant.setNewTokensListener(new NewOAuthTokensReceivedListener() { 
      @Override 
      public void onNewOAuthTokensReceived(OAuthTokens newTokens) { 
       String refreshTime = new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss") 
         .format(new java.util.Date()); 
       refreshToken = newTokens.getRefreshToken(); 
       System.out.printf("Token refresh time: %s\n", refreshTime); 

       writeRefreshTokenToFile(); 
      } 
     }); 

     getRefreshTokenFromFile(); 
     refreshAccessToken(); 
    } 

    public OAuthRefreshToken(String refreshToken) { 
     this.refreshToken = refreshToken; 
     writeRefreshTokenToFile(); 
    } 

    public OAuthDesktopMobileAuthCodeGrant getoAuthDesktopMobileAuthCodeGrant() { 
     return oAuthDesktopMobileAuthCodeGrant; 
    } 

    private void refreshAccessToken(){ 
     oAuthDesktopMobileAuthCodeGrant.requestAccessAndRefreshTokens(refreshToken); 
    } 

    private void getRefreshTokenFromFile(){ 
     try { 
      refreshToken = readFile(refreshTokenFileName, Charset.defaultCharset()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    private static String readFile(String path, Charset encoding) 
      throws IOException 
    { 
     byte[] encoded = Files.readAllBytes(Paths.get(path)); 
     return new String(encoded, encoding); 
    } 

    private void writeRefreshTokenToFile(){ 
     File refreshTokenFile = new File(refreshTokenFileName); 
     try { 
      FileWriter f2 = new FileWriter(refreshTokenFile); 
      f2.write(refreshToken); 
      f2.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      return; 
     } 

     System.out.printf("New refresh token: %s\n", refreshToken); 
     System.out.printf("Stored Safely in: %s\n", refreshTokenFileName); 
    } 

} 

Используйте его в вашем приложении, как:

final OAuthRefreshToken oAuthRefreshToken = new OAuthRefreshToken(); 
final OAuthDesktopMobileAuthCodeGrant oAuthDesktopMobileAuthCodeGrant = oAuthRefreshToken.getoAuthDesktopMobileAuthCodeGrant(); 

ответ

1

Вы правы, что согласие пользователя требуется спереди (один раз). После этого вы можете использовать токен обновления, чтобы запросить токены доступа без взаимодействия с пользователем. Подробнее о потоке предоставления кода авторизации с использованием Java-пакета Bing Ads Java см. Getting Started Using Java with Bing Ads Services. Помогает ли это?

+0

К сожалению, похоже, токен обновления длится до тех пор, пока токен аутентификации. если я жду больше часа между обновлениями, я должен повторно разрешить взаимодействие с пользователем. – marengaz

+0

Дальнейшее взаимодействие с пользователем не требуется, если, конечно, пароль учетной записи Microsoft не изменился или пользователь не удалил разрешения для вашего приложения (кажется, что это явно не случай здесь). Вы должны иметь возможность использовать токены токенов обновления, недели, даже месяцы позже и получить новый токен доступа + новый токен обновления. Приятно помочь устранить неполадки, если у вас есть более подробная информация, например. образец кода. В противном случае, если вы не хотите делиться им на форуме, пожалуйста, свяжитесь с нашей службой поддержки Bing Ads (https://advertise.bingads.microsoft.com/en-us/bing-ads-support). –

0

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

Смежные вопросы