1

マイコード: GoogleCredential資格例外:401 Unauthorized Error | com.google.api.client.auth.oauth2.TokenResponseException:401権限

try { 
     // Authorize the request. 
     credential = new GoogleCredential.Builder() 
       .setTransport(HTTP_TRANSPORT) 
       .setJsonFactory(JSON_FACTORY) 
       .setServiceAccountId(serviceAccId) 
       .setServiceAccountPrivateKeyFromP12File(certFilePath) 
       .setServiceAccountScopes(Lists.newArrayList(YouTubeScopes.YOUTUBE)) 
       .setServiceAccountUser(emailId) 
       .build(); 

credential.refreshToken()

エラーログ:

Error | 
Exception: 401 Unauthorized 
Error | 
com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized 
Error | 
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) 
Error | 
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) 
Error | 
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) 
Error | 
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384) 
Error | 
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) 
Error | 
    at com.google.api.client.auth.oauth2.Credential$refreshToken.call(Unknown Source) 
Error | 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
Error | 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
Error | 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:112) 
Error | 
    at viewlift.YouTubePublishService.authorizeCredentials(YouTubePublishService.groovy:82) 
Error | 
    at viewlift.YouTubePublishService$$FastClassBySpringCGLIB$$48c3206b.invoke(<generated>) 
Error | 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
Error | 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) 
Error | 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
Error | 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
Error | 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
Error | 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
Error | 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
Error | 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 
Error | 
    at viewlift.YouTubePublishService$$EnhancerBySpringCGLIB$$6e11774.authorizeCredentials(<generated>) 
Error | 
    at viewlift.YouTubePublishService$authorizeCredentials.call(Unknown Source) 
Error | 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:45) 
Error | 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:108) 
Error | 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:124) 
Error | 
    at com.viewlift.ViewLiftUtilsService.createSocialAccount(ViewLiftUtilsService.groovy:128) 
Error | 
    at com.viewlift.ViewLiftUtilsService$$FastClassBySpringCGLIB$$53f6d4a5.invoke(<generated>) 
Error | 
    at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204) 
Error | 
    at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:708) 
Error | 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157) 
Error | 
    at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98) 
Error | 
    at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262) 
Error | 
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95) 
Error | 
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179) 
Error | 
    at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644) 

サービスアカウントの作成手順は次のとおりです。

  1. oauth 2.0でWebアプリケーションを作成しました。
  2. クライアントIDを取得してサービスアカウントを作成しました。
  3. このサービスアカウントとp12証明書を使用して認証し、オブジェクトを作成しました。 GoogleCredentials
  4. リフレッシュトークンを取得するとすぐに、私に401例外が与えられました。

すべてのヘルプは、YouTubeのAPIは、サービスアカウントの認証をサポートしていません。この場合には

答えて

1

をいただければ幸いです。

回避策Oauth2に切り替えてコードを一度認証し、後で使用できるようにリフレッシュトークンを保存する必要があります。リフレッシュトークンは期限切れになることがありますが、頻繁に期限切れになることはありませんが、期限切れの場合は、コードを見直してコードを再認証する必要があります。

YouTube Data APIは、 プライベートユーザデータへのアクセスを認証するためのOAuth 2.0プロトコルをサポートしています。

サービスアカウントフローが はないアクセスユーザ情報を行うサーバー間の対話をサポートしています。ただし、YouTube Data APIでは、ではなく、 がこのフローをサポートしています。 YouTubeアカウントにサービスアカウントをリンクする方法がないので、

+0

現在、私が設定したサービスアカウントはYouTubeアカウントにのみアクセスしています。私はあなたの答えに同意しない。そのちょうど私は同じ方法で別のアカウントを設定することができません。私の以前のアカウントは私にビデオを持ち込み、その上で操作を行うことができます。しかし、この新しいアカウントは正しく設定されていません。私はOAUTH 2.0だけを使用しています。上記の手順はOAUTH 2.0です。 – Anik

+1

私の見積もりは、Googleのドキュメントから直接得られます。 「YouTube Data APIではこのフローはサポートされていません。サービスアカウントをYouTubeアカウントにリンクする方法はないため」私は、あなたが支持されていないものとして文書化されている何かをすることに幸運を祈っています。 – DaImTo

+0

setServiceAccountPrivateKeyFromP12File(certFilePath)< - サービスアカウント – DaImTo

関連する問題