理解Google开发者控制台

5

关于开发者控制台的功能,我有一些疑惑。

我正在访问YouTube数据APIv3的一个项目中。我创建了我的项目并获得了4个密钥:

  1. 浏览器密钥
  2. 服务器密钥
  3. Web客户端OAuth2.0客户端ID秘钥
  4. Android密钥

其中前三个是由Google服务自动生成的。我通过提供项目的SHA-1指纹生成了Android密钥。我有以下几个问题,但似乎无法得到答案:

  1. 为什么我会得到前三个自动生成的密钥?我不从事后端工作,那么如果客户端使用服务器密钥而不是浏览器密钥会有什么区别吗?

  2. 我猜SHA-1用于像公钥加密一样的工作。它是否仅取决于包和开发环境?我没有使用keytool进行此操作,而是直接在Studio中使用SigningReports功能完成的。指纹取决于哪些参数?我通过删除调试密钥库创建了新的SHA-1。Android Studio会自动重新生成调试密钥库。此加密技术究竟是如何工作的?

  3. 我的iOS同事能够在没有秘密密钥的情况下获取访问和刷新令牌。据我所知,对于OAuth2.0,我们需要获取授权令牌,将其与客户端ID、秘密密钥和API密钥一起使用以获取访问和刷新令牌。他们是如何做到的?此处秘密密钥扮演了什么角色?

  4. 最重要的是:我的项目中有不同的API密钥。在google-services.json中的一个与

youTubePlayerFragment.initialize(API_KEY, new YouTubePlayer.OnInitializedListener()

中的API密钥不同!为什么还能工作?


1
请给出解释,投票踩的人?我认为这是一个来自像我这样的新手的完全有效的问题。我当然不指望从一个人那里得到所有细节,因为它涉及各个领域。但是你至少可以贡献出你所知道的,以便对未来的访问者有所帮助。 - Rushi M Thakker
3个回答

1
你向Youtube的请求是通过Google Play服务进行的。您将OAuth2.0令牌嵌入到您的请求中。 OAuth2.0令牌进一步携带您特定类型的Android密钥。不同的Android密钥包括服务器,浏览器,Android,IOS等。

OAuth与您的用户身份验证相关联。 OAuth进一步携带和Android密钥一起给Google Play服务 - Google Play服务读取Google开发者控制台中的信息 - 以决定哪种特定类型的设备(例如,ios,浏览器,Android)正在请求Youtube服务器。

如果您在Android设备上,则不需要浏览器和服务器密钥。

https://developers.google.com/youtube/android/player/register


1

如果我说错了,请纠正我。

  1. 浏览器密钥:假设您拥有一个网站,并希望从中使用YouTube API

    服务器密钥:假设您为应用程序构建了自己的后端API,并且需要使用YouTube API

    Android密钥:假设您还拥有一个Android应用程序,它需要使用YouTube API

    您可以使用不同的密钥单独跟踪每个API消费者。您可以交换(不确定),但这只会混淆跟踪。

  2. SHA取决于密钥库(调试/签名)和每个系统都有唯一的调试密钥库。您可以创建自己的签名密钥库。

  3. 访问令牌与访问令牌秘密以及使用者密钥与使用者密钥秘密的区别 我认为适用于任何oAuth

  4. 嗯,YouTube API、Google Map API或任何其他API都是独立的服务。我们需要单独跟踪它们,因此我们对于每个消费者的每个服务都有不同的API_KEY(在1中解释)。

注意:在此处跟踪指的是API配额、每秒命中次数等。

我知道SHA-1是独特的并且取决于密钥库,但更准确地说,我的问题是它在不同机器上的区别。密钥库是由什么生成的,如何用它来生成API密钥和整个身份验证机制。我听说过keytool(JRE的一部分)。此外,我也听说过其他工具,如OpenSSL等,但没有清楚的想法。请查看我对@shweta porwals答案中关于4的评论。是的,后来我了解了3。 - Rushi M Thakker

1

答案 1:

开发者控制台来看,服务器密钥和浏览器密钥的区别如下:

服务器密钥:

如果您的应用程序在服务器上运行,请创建并使用服务器密钥。不要在服务器代码以外的地方使用此密钥。例如,不要将其嵌入到网页中。为了防止配额被盗用,请限制您的密钥,使得请求仅允许来自服务器源IP地址。

浏览器密钥:

如果您的应用程序在客户端(例如Web浏览器)上运行,请创建并使用浏览器密钥。为了防止您的密钥被用于未经授权的站点,只允许来自您管理的域名的引荐。

答案 2:

这也适用于keytool和SigningReports功能。

答案 4:

您可以使用多个API密钥,当您在Google开发者控制台中启用API密钥并在项目根目录/yourapp/src/debug/AndroidManifest.xml中使用API密钥时,这是可能的。例如:

<!-- Goolge Maps API Key -->
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="******************" />    

<!-- Google Places API Key -->
<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="******************" />   

我仍然没有理解第一个问题的答案,但由于它的优先级较低,我不会讨论它。我编辑了我的问题,因为我认为第二个问题有误解。至于你对第四个问题的回答,我以为google-services.json包含了与该项目对应的所有API的密钥。那么为什么它只有一个密钥呢? - Rushi M Thakker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接