私の全体的な目標は、毎日report using the bing ads APIを自動的にダウンロードできるようにすることです。これを行うには、authenticate with OAuthが必要です(私は新しいMicrosoftアカウントを持っているため、古いPasswordAuthenticationメソッドは機能しません)。私は "認証コード付与フロー"を手作業で行い、自分自身を成功裏に承認しました。問題は次のとおりです。Bing Ads用Microsoft Live ConnectブラウザなしのOAuth 2.0
- トークンの有効期限が切れたときにトークンが1時間
- に対してのみ有効である、プロセスが再びWebブラウザを使用してログイン手動にユーザーを必要とし、アプリへのアクセス
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時間以上待つと、私はユーザーのやりとりで再許可する必要があります – marengaz
もちろん、Microsoftアカウントのパスワードが変更されたり、ユーザーがあなたのアプリケーションのアクセス権を削除しない限り、この場合のケース)。日、週、さらに数か月後にリフレッシュトークンを使用して、新しいアクセストークン+新しいリフレッシュトークンを取得できるはずです。たとえば詳細などの情報があれば、トラブルシューティングに役立ちます。コードサンプル。それ以外の場合は、フォーラムで共有したくない場合は、[Bing Adsサポートチームにお問い合わせください](https://advertise.bingads.microsoft.com/en-us/bing-ads-support)までお気軽にお問い合わせください。 –