2016-09-13 6 views
2

내 목표는 매일 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

사용자 동의는 앞에 한 번만 입력해야합니다. 그런 다음 새로 고침 토큰을 사용하여 사용자 상호 작용없이 추가 액세스 토큰을 요청할 수 있습니다. Bing Ads Java SDK를 사용하여 승인 코드 부여 흐름에 대한 자세한 내용은 Getting Started Using Java with Bing Ads Services을 참조하십시오. 이게 도움이 되나요?

+0

불행히도 새로 고침 토큰은 인증 토큰으로 만 지속됩니다. 내가 새로 고침하는 사이에 1 시간 이상 기다릴 경우 사용자 상호 작용으로 다시 허용해야합니다. – marengaz

+0

물론 Microsoft 계정 비밀번호가 변경되거나 사용자가 앱에 대한 사용 권한을 삭제하지 않는 이상 추가 사용자 상호 작용이 필요하지 않아야합니다. 이 경우). 일, 주, 심지어 수 개월 후에 새로 고침 토큰을 사용하고 새 액세스 토큰 + 새 새로 고침 토큰을 가져올 수 있어야합니다. 예 : 자세한 정보가 있으면 문제 해결에 도움이됩니다. 코드 샘플. 그렇지 않은 경우 포럼에서 공유하고 싶지 않다면 [Bing Ads 지원 팀에 문의하십시오.] (https://advertise.bingads.microsoft.com/en-us/bing-ads-support)로 언제든지 문의하십시오. –

0

새로 고침 토큰이 그만큼 빨리 만료되지 않아야합니다. 대개 영구적이거나 아주 오래되었습니다. 그러나 이것들은 취소되거나 너무 많이 요청하면 무효화 될 수 있습니다. 25 개 이상의 새로 고침 토큰을 요청하면 오래된 토큰이 유효하지 않게됩니다.