私の設定が正しいことを誰かに知らせるために、いくつかの情報が欠けている可能性があることを前もってお詫びします。他に何を指定する必要があるか教えてください。私は大学で働いており、Google を通じて学生のメール アカウントをホストしています。パスワードを忘れてリセットしなければならないことはかなり頻繁に発生します。自分自身に関する十分な情報を確認した場合にパスワードを設定できるページがあります。私たちが使用してきたコードは、ディレクトリ API を優先して Google によって廃止されました。私はこの古いコードを変換する任務を負っています:
//changes a password
@Override
public void reset ( final String username, final String password ) throws ResetException
{
try
{
Validate.notEmpty( username );
Validate.notEmpty( password );
final AppsForYourDomainClient client = ClientFactory.getClient(); //admin-user account
final UserEntry entry = client.retrieveUser( username );
Validate.isTrue( !entry.getLogin().getSuspended(), "Account is suspended." );
entry.getLogin().setPassword( password );
client.updateUser( username, entry );
}
catch ( final Exception e )
{
throw new ResetException( e );
}
}
新しい API を使用して何かに変換します。多くのドキュメントといくつかの例を読みましたが、どれも役に立たないようです。管理コンソールを介して管理者アカウントで Admin SDK を有効にし、アプリを登録して、開発者コンソールからキーを取得しましたが、必要なものを返すリクエストを受け取ることができないようです。現在、ユーザーのリストを取得しようとしています。
public void testList () throws Exception
{
InputStream is = null;
final String accessToken = getAccessToken();
final NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
final JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
final File p12 = new File( GoogleResetterTest.class.getClassLoader().getResource("ead05e56893a.p12").toURI() );
GoogleCredential credential = new GoogleCredential.Builder().setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId( SERVICE_ACCOUNT_EMAIL )
.setServiceAccountScopes( PlusScopes.all() )
.setServiceAccountPrivateKeyFromP12File( p12 ) //password: notasecret
.setClientSecrets(CLIENT_ID, CLIENT_SECRET)
.build();
final Directory dir = new Directory.Builder( httpTransport, jsonFactory, credential)
.setApplicationName( "API Project" )
.build();
final Directory.Users diruser = dir.users();
final Directory.Users.List diruserlist = diruser.list().setDomain( EMAIL_DOMAIN );
final HttpResponse response = diruserlist.executeUsingHead();
is = response.getContent();
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer, "UTF-8");
String theString = writer.toString();
IOUtils.closeQuietly( is );
}
diruserlist.executeUsingHead(); で 行私はこの応答を受け取ります:
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request { "error" : "invalid_grant" }
私には、これはかなり役に立たないエラー メッセージです。
この全体を複雑にしすぎていると思わずにはいられません。私は元のコードのシンプルさが気に入りましたが、新しい API に対するいくつかの反応は、より複雑であると批判しています。誰かがこれを行う必要があり、これを修正するための正しいパスを教えてもらえますか?