【发布时间】:2013-06-14 14:54:11
【问题描述】:
我正在使用 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端口没有监听,如果用户选择浏览器,浏览器会显示一个错误页面,整个认证流程就会中断。
我怎样才能避免这种情况?
【问题讨论】:
-
您考虑过使用 AccountManager 吗?你不必担心那些东西......
-
@TomTasche,我还想允许使用其他 OpenID Connect 提供商(不仅是当时 Android 已知的提供商)登录。我在问题的开头提到了它。
标签: android android-intent oauth-2.0 openid