2016-09-13 9 views
2

私の全体的な目標は、毎日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

お客様の同意が必要です(一度)。その後、リフレッシュトークンを使用して、ユーザーの操作なしで追加のアクセストークンを要求できます。 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以上の異なるリフレッシュトークンを要求したとき、古いものが無効になるのを信じています。

関連する問題