Microsoft Live Connect для Bing Ads OAuth 2.0 без браузера

Моя общая цель - иметь возможность автоматически загружать ежедневные отчеты с помощью API объявлений Bing. Для этого мне нужно пройти аутентификацию с помощью OAuth (старый метод PasswordAuthentication не работает, потому что у меня новая учетная запись Microsoft). Я прошел "Поток предоставления кода авторизации" вручную и успешно авторизовался. Проблема в:

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

Вот пример настольного приложения, использующего OAuth

Кто-нибудь знает или

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

РЕШЕНИЕ:

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

Я написал класс, чтобы разобраться со всеми вещами 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();

2 ответа

Решение

Вы правы в том, что согласие пользователя требуется сразу (один раз). После этого вы можете использовать токен обновления для запроса дополнительных токенов доступа без взаимодействия с пользователем. Подробную информацию о порядке предоставления кода авторизации с использованием Java SDK Bing Ads см. В разделе Начало работы с Java со службами Bing Ads. Это помогает?

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

Другие вопросы по тегам