我目前的 facebook 登录流程 100% 正常工作,我刚刚将 Google 添加到了方程式中。我编写了代码,以便我的 google 提供商 token 的格式和缓存方式与我的 facebook token 相同。我的代码获取 facebook 和 google token 并执行以下操作:(以下示例用于 google 登录):
USER_GOOGLE_TOKEN = new JsonObject();
USER_GOOGLE_TOKEN.addProperty("access_token", accessToken);
cacheProviderToken(USER_GOOGLE_TOKEN.toString());
setCurrentProvider("google");
然后,在 Activity 中的身份验证方法中,以下是我的 mobileserviceclient.login 的方式:
MobileServiceAuthenticationProvider provider = null;
if (getCurrentProvider().equals("facebook")){
provider = MobileServiceAuthenticationProvider.Facebook;
} else if (getCurrentProvider().equals("google")) {
provider = MobileServiceAuthenticationProvider.Google;
}
token.addProperty("access_token", googleToken);
ListenableFuture<MobileServiceUser> mLogin = mClient.login(MobileServiceAuthenticationProvider.Google, getProviderToken());
问题在于 Facebook 有效,而 Google 产生了未经授权的 401。 我收到的具体错误(在未来返回失败之前)是:W/DefaultRequestDirector:`身份验证错误:无法响应这些挑战中的任何一个:{}。 Azure 日志显示这是未经授权的 401。
在尝试使用 Google 登录 token 之前,我已成功打印 Google 登录 token 并按照与 Facebook token 相同的方式对其进行格式化。我的谷歌 key 有误吗?我已经重新生成了它们一次,并且尝试将origins设置为https,尝试了不同的组合键,甚至摆脱了我的google-services.json(显然不需要)。我没有使用 this google doc 上生成的客户端 key .
这里的另一个问题是我的 Azure 移动应用程序的身份验证设置如何发挥作用?在从 MobileService 迁移到 MobileApp 之前,我最初已经配置了 facebook,现在我不需要使用“统包身份验证”功能来使其工作。我继续输入我的应用程序 key 和 Facebook 的 secret ,但无论是否启用它都绝对有效。这是 oauth 的必要功能吗?
此外,根据登录时的 token 格式以及身份验证功能的开/关状态,会出现错误:W/DefaultRequestDirector:身份验证错误:无法响应以下任何质询:{}
,大括号中将包含一些有关 azure 端点的文本。
如果您能提供帮助,非常感谢。这是一个很挑剔的问题。
最佳答案
应用服务身份验证/授权与迁移的移动服务不兼容,必须保持关闭状态。
要使用迁移的移动服务更新身份验证设置,您需要设置应用设置。对于 Facebook,即 MS_FacebookAppID
和 MS_FacebookAppSecret
。对于 Google,即 MS_GoogleClientID
和 MS_GoogleClientSecret
。
关于android - Azure mobileserviceclient 登录返回身份验证错误 (401),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685335/