내 목표는 매일 report using the bing ads API을 자동으로 다운로드 할 수있게하는 것입니다. 이렇게하려면 authenticate with OAuth이 필요합니다. 새 Microsoft 계정이있어서 이전 PasswordAuthentication 메서드가 작동하지 않습니다. 나는 "Authorization Code Grant Flow"를 수동으로 거쳐 성공적으로 인증을 받았다. 문제는 다음과 같습니다Bing Ads 용 Microsoft Live Connect 브라우저가없는 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 시간 이상 기다릴 경우 사용자 상호 작용으로 다시 허용해야합니다. – marengaz
물론 Microsoft 계정 비밀번호가 변경되거나 사용자가 앱에 대한 사용 권한을 삭제하지 않는 이상 추가 사용자 상호 작용이 필요하지 않아야합니다. 이 경우). 일, 주, 심지어 수 개월 후에 새로 고침 토큰을 사용하고 새 액세스 토큰 + 새 새로 고침 토큰을 가져올 수 있어야합니다. 예 : 자세한 정보가 있으면 문제 해결에 도움이됩니다. 코드 샘플. 그렇지 않은 경우 포럼에서 공유하고 싶지 않다면 [Bing Ads 지원 팀에 문의하십시오.] (https://advertise.bingads.microsoft.com/en-us/bing-ads-support)로 언제든지 문의하십시오. –