0

Google カレンダーのようなアプリケーションを開発しています。ユーザーは Google アカウントを入力してログインし、Google タスクから同期します。

これは OAuth2 を使用せずに可能ですか?

4

2 に答える 2

2

OAuth が推奨されるのは、Google ユーザーを保護するためです。Google に単純なユーザー名/パスワード API があったとしたらどうでしょう。あなたが悪意のあるサイトの作成者であり、ユーザーが自分のサイトに資格情報を入力することを許可した場合、資格情報を保存し、ユーザーの同意なしに操作を実行できます。

OAuth2 システムを通過することを検討する必要があります。

本当にこれを回避したい場合 (回避しないでください)、ユーザーがユーザー名とパスワードを直接入力した場合に何が起こるかを模倣する HTTP 要求を発行し、スクリーン スクレイピングを使用してデータを抽出することができます。明らかに、これは脆弱なアプローチであり、Google が最近導入した 2 要素認証では、オプトインしたユーザーには機能しません。

于 2012-10-19T02:35:25.570 に答える
1

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);
  }
}

これを実行できる場合は、私に知らせてください。

于 2012-11-27T18:15:05.523 に答える