gpt4 book ai didi

使用 Google OpenID 进行 Android 身份验证。接下来是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:07:13 27 4
gpt4 key购买 nike

我不是程序员,但我需要自己做这件事。我需要一些帮助。

过去两天我一直在寻找解决方案,但找不到。

好的。我正在编写 Android native 应用程序。我的第一个目标是实现通过 Google 帐户(已在手机上设置)登录的可能性。

所以我正在使用 AccountManager 获取“com.google”帐户,我通过这种方式获取了一个授权 token :

Account[] mAccounts = mAccountManager.getAccountsByType("com.google"); 
AccountManagerFuture<Bundle> response =
mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null);

Bundle authTokenBundle;
String authToken;

try {
authTokenBundle = response.getResult();
authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString();
} catch (OperationCanceledException e) {
Log.e(TAG, e.getMessage());
} catch (AuthenticatorException e) {
Log.e(TAG, e.getMessage());
} catch (IOException e) {
Log.e(TAG, e.getMessage());
}

我的问题是 - 我的下一步应该是什么?我如何才能进一步进行此身份验证过程?我应该如何使用这个 token ?

我找到了一些资源,但其中大部分都使用 OAuth 或基于 Web。我只需要进行身份验证并(如果可能的话)获取用户名(我已经有了电子邮件地址),我不需要访问任何 Google 服务。

提前致谢。

最佳答案

实际上,您需要的是 OAuth 2,而不是 OpenID -- OpenID 本质上是基于网络的,因此您需要通过 WebView 或浏览器跳过一些障碍。 OAuth 2 允许您直接在应用程序中将来自 AccountManager 的 token 与 Google API 结合使用。

在调用 getAuthToken() 时,authTokenType 参数是 OAuth 2 范围,您希望它是 userinfo.profile 并且userinfo.email 以验证电子邮件地址(您已经拥有它,但尚未验证它;理论上它可能被欺骗)并获取用户的姓名。

这是我在类似情况下使用的完整范围:

private static final String OAUTH2_SCOPE =
"oauth2:" +
"https://www.googleapis.com/auth/userinfo.profile" +
" " +
"https://www.googleapis.com/auth/userinfo.email";

当然,您可以只使用内联的整个字符串文字,但我更喜欢将其构建起来并保持清晰,这样可以在以后必要时更轻松地进行更改。

在我的例子中,我使用 getAuthTokenByFeatures(),如下所示:

am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null,
new AccountManagerCallback<Bundle>()
{
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bundle = future.getResult();
System.out.println("Got Bundle:\n" +
" act name: " +
bundle.getString(AccountManager.KEY_ACCOUNT_NAME) +
"\n act type: " +
bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) +
"\n auth token: " +
bundle.getString(AccountManager.KEY_AUTHTOKEN));
} catch (Exception e) {
System.out.println("getAuthTokenByFeatures() cancelled or failed:");
e.printStackTrace();
}
}
}, null);

但您可以将相同的想法应用到您的代码中。然后,您可以将 OAuth token 与 Google 用户信息 API 一起使用,如 Using OAuth 2.0 for Login 中所述验证电子邮件并获取用户名。

关于使用 Google OpenID 进行 Android 身份验证。接下来是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259202/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com