Google Translation API 的 OAuth 范围是啥?

Posted

技术标签:

【中文标题】Google Translation API 的 OAuth 范围是啥?【英文标题】:What is the OAuth scope for the Google Translation API?Google Translation API 的 OAuth 范围是什么? 【发布时间】:2013-02-21 13:31:24 【问题描述】:

肯定是其他人在使用 API,我查看并搜索过,我似乎无法在身份验证时为范围参数找到正确的值:

我查看了所有这些范围列表,什么都没有,尝试了 OAuth 2.0 游乐场,没有翻译。

oauth playground v1

oauth playground v2

oath supported scopes

auth scopes

欢迎提供任何线索,谢谢。

错误信息:

Error: invalid_request

Missing required parameter: scope

Learn more
Request Details

更新

用户 Ezra 解释说,翻译 API 不需要 OAuth2 身份验证。

我是通过这条路走上这条路的:

我试图让这里的示例代码工作:

translation api sample code

并且没有 apiclient.discovery 模块

from apiclient.discovery import build

我去寻找那些让我登陆的东西here to this quick-start configurator 这给了我一个自动生成的翻译 api 项目here:

这个应该为翻译 API 量身定制的入门项目包括一大堆 OAuth 配置,所以由于这里提到的错误,我最后问了这个问题

 exception calling translation api: <HttpError 400 when requesting    https://www.googleapis.com/language/translate/v2?q=zebra&source=en&alt=json&target=fr&key=MYSECRETKEYWENTHERE returned "Bad Request">

我用来进行上述调用的代码是:

   service = build('translate', 'v2',
        developerKey='MYSECRETKEYWENTHERE')
result = service.translations().list(
  source='en',
  target=lang,
  q='zebra'
).execute()

如果我直接发出错误所抱怨的相同调用,它可以正常工作

https://www.googleapis.com/language/translate/v2?key=MYSECRETKEYWENTHERE&q=zebra&target=fr&alt=json&source=en

再次更新

好的,我从示例项目中删除了所有 OAuth 代码,然后再次运行它,最后发现我的密钥中有一个拼写错误……不要了

感谢您的回答!

.

谢谢

【问题讨论】:

【参考方案1】:

我认为您误解了 OAuth 范围的用途。您没有列出任何代码,所以我将解释一些概念,希望您可以将它们应用到您的情况。


OAuth 范围解释:

OAuth 范围的目的是访问有关经过身份验证的用户的信息。每个应用程序的范围都不同,并决定了应用程序有权访问的有关用户的哪些信息。

具体来说,一个OAuth请求,范围参数为

https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile

登录时会向用户显示类似于以下的提示:

+ View basic information about your account
    * View your name, public profile URL, and photo
    * View your gender and birthdate
    * View your country, language, and timezone
+ View your email address
    * View the email address associated with your account

虽然只有https://www.googleapis.com/auth/userinfo.email 的人会显示如下内容:

+ View your email address
    * View the email address associated with your account

翻译 API 解释:

要使用翻译 API,您不必让用户使用 OAuth 进行身份验证。您只需获取一个 API 密钥,然后在对服务的请求中提供该密钥。

Translate API 的使用与 OAuth 的使用完全正交。

如Translate API site 中所述,要翻译一些内容,您只需向

https://www.googleapis.com/language/translate/v2?parameters

使用适当的参数。

所需的参数是,如文档中所列,

API 密钥。使用关键查询参数来识别您的应用程序。 目标语言。使用目标查询参数指定您要翻译成的语言。 源文本字符串。使用 q 查询参数来识别要翻译的字符串。

具体而言,将文本“hello world”翻译成德语的请求是:

https://www.googleapis.com/language/translate/v2?key=INSERT-YOUR-KEY&source=en&target=de&q=Hello%20world

查看parameters specification 了解您必须提供什么。

做什么:

查看Python example using the Translate API 的来源或查找API library for the language you want to use。

您会在示例中看到没有提及 OAuth 范围,因为不需要针对 Translate API 服务进行身份验证。您只需提供您的 API 密钥,以及您对服务的请求中要翻译的文本。

可能存在需要范围的 API 调用,但 Translate 不是其中之一。


如果您需要关于用户的某些信息,则必须查找访问该信息所需的 API 和范围。然后,您将根据需要将此信息提供给 Translate API。

如果是400:

如果您收到错误响应,那很好,因为对服务的调用正在工作,即使它没有按照您的意愿执行。

400 的情况下,Translate API 的响应将在其响应中为您提供有关您的错误的线索。


 "error": 
  "errors": [
   
    "domain": "usageLimits",
    "reason": "keyInvalid",
    "message": "Bad Request"
   
  ],
  "code": 400,
  "message": "Bad Request"
 

上面的响应表明密钥无效。您可以通过Google API Console 申请新的(或查找旧的)。

总结:

OAuth 范围用于请求有关用户的信息。在对用户进行身份验证时,您必须确定范围,并且您可以访问这些范围提供的所有信息。 翻译 API 不需要范围。您在请求中提供 API 密钥(和一些其他信息),它会返回翻译 as documented。 如果您希望翻译有关用户的信息,则必须分两步完成。首先,通过在适当范围内对用户进行身份验证来收集信息,其次通过将信息提供给 Translate API。 如果您收到400,响应将包含一些可用于调试问题的信息。

【讨论】:

好的,谢谢你的澄清。由于翻译应用程序的此示例代码 (code.google.com/p/google-api-python-client/source/browse/…) 需要 apiclient.discovery,我走上了这条路,这似乎不是默认情况下出现的。所以,我去找那个把我带到这里的包:google-api-client-libraries.appspot.com/quickstart/c/… 并解决了这个问题。我会更新我的问题 这看起来已经过时了,Google 建议使用 OAuth,我不确定您是否可以再获得常规的 API 密钥。【参考方案2】:

根据Google's documentation,您必须查看特定 API 的文档。

按照this Google Group question更新:

“Translate API(v1 和 v2)是未经身份验证的 API,因此您不需要使用 OAuth。相反,对于 v2,您应该使用 API 密钥,您可以在此处获取:@987654323 @"

【讨论】:

谢谢,这确实有帮助。您与以斯拉并列正确答案 “你不需要使用 OAuth”...但是如果你想用呢? 我的理解是 OAuth 不是一个选项,因为它是一个未经身份验证的 API。 “您不需要”一词的选择是从小组帖子中逐字记录的;更好的选择可能是“你不能”。【参考方案3】:

对于错误信息

错误:invalid_request 缺少必需参数:范围

您需要在表单中添加范围

<input type="hidden" name="scope" value="https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo#email https://www.googleapis.com/auth/plus.me https://www.googleapis.com/auth/tasks https://www-opensocial.googleusercontent.com/api/people https://www.googleapis.com/auth/plus.login" />

请参考spring social loginlinkedin、facebook、twitter 和 google 提供商。

【讨论】:

以上是关于Google Translation API 的 OAuth 范围是啥?的主要内容,如果未能解决你的问题,请参考以下文章

将 Google Translation API 与 localhost 一起使用

错误NuGet包google翻译API

如何在浏览器中获取 Google Cloud Translation API 的身份验证令牌(chrome 扩展)

Google翻译问题之——Cloud Translation API has not been used in project x before or it is disabled.

如何将凭证传递给 Translation API v3?

从 Google Translate API 获取多种变体