私は Social Auth をJavaで使用して、自分のコンピューター(localhost:8080
で)で実行しているおもちゃのアプリでGoogle OAuth 2認証を機能させようとしています。
ただし、アプリがGoogleに接続してユーザーを認証すると、Googleは次のエラーページを返します。
「My Hobby App」という名前の私のアプリは、デベロッパーコンソールで次のように設定されています。
Google OAuth 2 docs では、次のように指定されています。
redirect_uri:Developers Consoleでこのプロジェクトにリストされているredirect_uri値の1つ。
応答の送信先を決定します。このパラメーターの値は、Google Developers Consoleでこのプロジェクトにリストされている値の1つと正確に一致する必要があります(httpまたはhttpsスキーム、大文字小文字の区別、末尾の「/」を含む)。
いくつか質問があります。
redirect_uri
sを追加するにはどうすればよいですか?思ったより簡単ですが、残念ながら数時間かかりました。
通常、Googleまたは他の場所にある複数のリンクを追加するときは、,
または;
で区切りますが、リダイレクトURIでは新しい行を使用する必要があるため、実際にはそれほど直感的ではありません。したがって、Edit Settings
ボタンを押すと、改行(enter
)で区切られたリンクがいくつかある場合は、URIやオリジンに追加できます。
複雑なアプリ構成や新しいキーは必要ありません。
2番目の質問:PRODUCT NAME
、HOMEPAGE
、LOGO
などのアプリ情報を変更するには、[同意画面]タブに移動する必要があります。
この回答は質問に対する正確な回答ではない可能性がありますが、Google OAuthを初めて使用していて、なぜ複数のURIが認識されないのか疑問に思う方に役立つと思います。
コードの2箇所でリダイレクトURIを使用します。 1回目は認証コードを取得し、2回目はこのコードをアクセストークンと交換します。
Google docs では、認証コード要求(最初の要求)に対する応答がリダイレクトURIに送信されることが明記されています。そのため、エンドポイントAからリクエストを作成し、再発行されたURIをエンドポイントBとして指定すると、Googleは認証コードをエンドポイントBに送信します。これは明確で、エラーなしで正常に機能します。
2番目の要求に来て、ドキュメントはややあいまいです。 redirect_URIパラメータは次のように説明されています。
redirect_uri:リダイレクトURIの設定で説明されているように、APIコンソールで指定するURI。
これが私がこれがどのように機能するかを理解するのに間違いを犯したところです。最初の呼び出しと同様のアプローチに従って、3番目のエンドポイントCを使用し、2番目の呼び出しを行うときに、このエンドポイントCをredirect_URIパラメーターに渡しました。 APIコンソールでエンドポイントBおよびCが指定されているにもかかわらず、URIの不一致エラーが発生しました。
問題は、最初の呼び出しの場合とは異なり、2番目の呼び出しへの応答は、要求が行われたのと同じエンドポイントに到達することです。 pythonで以下のようにリクエストしました:
r = requests.post(token_endpoint, params)
r
には、トークン付きの応答があります。
両方の呼び出しで同じredirect_URIを使用することになっているため、URIの不一致が発生していました。
したがって、単一のOAuth=リクエストの場合、単一のredirect_URIを使用する必要があります。
しかし、それが問題を引き起こします。単一のアプリのAPIコンソールで複数のredirect_URIが許可されるのはなぜですか。同じアプリで複数のauthCode-token呼び出しを行う必要がある場合、複数のredirect_URIを使用する余裕があると想定しています。