【问题标题】:Azure Google Authentication shows Error:disallowed_useragentAzure Google 身份验证显示错误:disallowed_useragent
【发布时间】:2016-11-11 17:19:05
【问题描述】:

我最近遇到了这个错误Error Message

我认为这是由于 Google Oauth 发生了这种变化:https://developers.googleblog.com/2016/08/modernizing-oauth-interactions-in-native-apps.html

我正在使用 Azure 身份验证服务来验证我用 Xamarin Forms (C#) 编写的 iOS 应用程序。

代码请求 Azure 身份验证服务:

var window = UIKit.UIApplication.SharedApplication.KeyWindow;
var root = window.RootViewController;
if(root != null)
{
    var current = root;
    while(current.PresentedViewController != null)
    {
        current = current.PresentedViewController;
    }

    var user = await AzureService.Instance.Client.LoginAsync(window.RootViewController, MobileServiceAuthenticationProvider.Google, new Dictionary<string, string>() { { "access_type", "offline" } });
    return user;
}

网址请求是:

using(var client = new HttpClient())
{
    const string url = "https://www.googleapis.com/oauth2/v3/userinfo?alt=json&suppress_webview_warning=true";
    client.DefaultRequestHeaders.Add("Authorization", token);
    var json = client.GetStringAsync(url).Result;
    var profile = JsonConvert.DeserializeObject<GoogleUserProfile>(json);
    return profile;
}

但是它仍然向我显示错误: Google 的 Azure 身份验证设置正确,因为直到最近我一直使用此设置一个多月。有人遇到同样的问题或知道如何解决这个问题吗?

【问题讨论】:

  • 我正在处理同样的问题,我得到的所有建议都是用原生 iOS 代码编写的。我正在处理前端带有 JS 和 HTML 的传统 Ruby on Rails 应用程序。我没有用 JS 做 OAuth。我对 Ruby 很感兴趣,但我认为这种变化基本上扼杀了我的独立应用程序。

标签: authentication xamarin.forms google-oauth azure-mobile-services


【解决方案1】:

简短的版本是 Google 将 OAuth 协议更改为“更安全”。我们目前正在努力更新各种客户端 SDK,以启用新的更安全的方法,该方法仅影响服务器流。

要做的事情的简短版本是实现客户端流。将 Google SDK 集成到您的应用中,然后将收到的令牌发送到后端。由于您在 Xamarin.Forms 中,这将意味着在特定于平台的代码中实现某些内容。

抱歉,我没有这方面的例子。我已经完成了 FB auth 和 AAD auth,但目前还没有完成 Google auth。然而,概念是相同的。您需要在特定于平台的代码中执行 Google 身份验证,然后使用类似于此的方式调用 ZUMO 身份验证端点:

public async Task<MobileServiceUser> LoginAsync(MobileServiceClient client)
{
    // Call the code to do the Google Auth via the Google SDK
    var accessToken = await LoginGoogleAsync();
    // Construct and call the client-flow ZUMO auth
    var zumoPayload = new JObject();
    zumoPayload["access_token"] = accessToken;
    return await client.LoginAsync("google", zumoPayload);
}

每个 Azure 移动应用 SDK 的下一个版本都将包含 Google OAuth 更改。很遗憾,我没有这些版本的时间表。

【讨论】:

  • 在 Google 博客中,他们说我们可以在请求 URL 中添加“suppress_webview_warning=true”以暂时避免错误,但我不确定我是否将其添加到正确的位置。对于您发布的代码,LoginGoogleAsync 函数内部是什么?
  • LoginGoogleAsync() 方法是触发 Google SDK 身份验证的调用。您必须在该方法中通过他们的 Client SDK 实现 Google Auth 并返回您收到的访问令牌。
  • 我们正在努力。我预计 iOS SDK 将在本周推出测试版,但我们仍在努力。
  • 嗨@AdrianHall 对此有何更新?我们看到客户端 sdk 已更新到 3.1.0(用于 .Net),但似乎更改日志尚未更新。这是否包含针对 Google 登录的修复? github.com/Azure/azure-mobile-apps-net-client/blob/master/…
  • 是的 - .NET 和 iOS Native 已更新。 Android Native 仍在开发中(由于 Android 平台的复杂性)。
猜你喜欢
  • 2018-01-26
  • 2017-09-16
  • 2017-11-26
  • 2014-06-07
  • 2017-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
相关资源
最近更新 更多