我正在玩 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 端口没有监听,如果用户选择浏览器,浏览器将显示错误页面,整个身份验证流程将中断。
我怎样才能避免这种情况?