Google カレンダーのようなアプリケーションを開発しています。ユーザーは Google アカウントを入力してログインし、Google タスクから同期します。
これは OAuth2 を使用せずに可能ですか?
Google カレンダーのようなアプリケーションを開発しています。ユーザーは Google アカウントを入力してログインし、Google タスクから同期します。
これは OAuth2 を使用せずに可能ですか?
OAuth が推奨されるのは、Google ユーザーを保護するためです。Google に単純なユーザー名/パスワード API があったとしたらどうでしょう。あなたが悪意のあるサイトの作成者であり、ユーザーが自分のサイトに資格情報を入力することを許可した場合、資格情報を保存し、ユーザーの同意なしに操作を実行できます。
OAuth2 システムを通過することを検討する必要があります。
本当にこれを回避したい場合 (回避しないでください)、ユーザーがユーザー名とパスワードを直接入力した場合に何が起こるかを模倣する HTTP 要求を発行し、スクリーン スクレイピングを使用してデータを抽出することができます。明らかに、これは脆弱なアプローチであり、Google が最近導入した 2 要素認証では、オプトインしたユーザーには機能しません。
OAuth Resource Owner Password Credential フローを使用すると、OAuth フローをユーザーから「隠す」ことができますが、ユーザーのユーザー名/パスワードを管理している場合に限ります (アクセス トークン リクエストの一部として提供する必要があります)。残念ながら、Google はこのタイプの認証フローをサポートしていないようです。私は数日間それと戦ってきましたが、バックエンドでのサポートが不足しているようです。Google API が Java 用に提供する (機能しない) 例を次に示します。
static void requestAccessToken() throws IOException {
try {
ResourceOwnerPasswordCredentialsGrant request =
new ResourceOwnerPasswordCredentialsGrant(new NetHttpTransport(),
new JacksonFactory(),
"https://server.example.com/authorize",
"s6BhdRkqt3",
"gX1fBat3bV",
"johndoe",
"A3ddj3w");
AccessTokenResponse response = request.execute();
System.out.println("Access token: " + response.accessToken);
} catch (HttpResponseException e) {
AccessTokenErrorResponse response = e.response.parseAs(AccessTokenErrorResponse.class);
System.out.println("Error: " + response.error);
}
}
これを実行できる場合は、私に知らせてください。