私は OpenID Connect と OAuth をいじっており、複数の OpenID プロバイダーをサポートしたいと考えています (AccountManager によって認識されているものだけではありません)。しかし、私はこの問題に遭遇しました。
インストール済みアプリケーションとして Google に対して認証する場合は、(Google によって) 事前定義されたコールバック アドレスを に渡しますhttp://localhost
。そこで、次のように Google のエンドポイントにリダイレクトして OAuth フローを開始します。
String url = "https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile&state=%2F&redirect_uri=http%3A%2F%2Flocalhost%3A9999&response_type=code&client_id=000000000000000.apps.googleusercontent.com";
Intent i = new Intent (Intent.ACTION_VIEW);
i.setData (Uri.parse (url));
startActivity (i);
必要に応じて redirect_uri を渡すことに注意してください (許可されているポート 9999)。次のように、このタイプのアドレスが読み込まれるのに応答するようにアプリケーションを登録しました。
<data android:scheme="http" android:host="localhost" android:port="9999" />
ただし、これにより、システムは「次でアクションを完了する」ダイアログを表示します。
そのため、電話のポート 9999 でリッスンしているものがないため、ユーザーがブラウザを選択すると、エラー ページがブラウザによって表示され、認証フロー全体が中断されます。
どうすればこれを回避できますか?