【问题标题】:How do I supply Header info such as Package Name and SHA1 in Google API request?如何在 Google API 请求中提供包名称和 SHA1 等标头信息?
【发布时间】:2019-07-20 18:18:57
【问题描述】:

我正在尝试使用 dotNet SDK 访问 Google API。当我没有 API 限制时,我可以使用以下代码访问和获取 JSON。我仍然可以通过 IP 地址限制访问。但是当我想使用应用程序限制时,我必须提供我已经生成的包名称和 SHA-1。

我只是不知道在请求 API 获取时如何提供此标头信息。 有几种方法可以实现凭证。通过使用服务帐户,我只需要提供电子邮件和私钥,但我不想使用 OAuth 访问。如果有最好的实现方法,请告诉我。

var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
    ApiKey = "****",
    // HttpClientInitializer = credential,
    ApplicationName = "*****"
});

Similar solution but it's in Java

【问题讨论】:

  • BaseClientService 允许使用 IHttpClientFactory,因此您可以提供工厂
  • 谢谢。是这样的吗? youtubeService.HttpClient.DefaultRequestHeaders.Add("X-Android-Package", AppInfo.PackageName);

标签: c# xamarin google-api youtube-data-api google-api-dotnet-client


【解决方案1】:

Xamarin 和 Google APIs .net 客户端库

您似乎正在尝试将 Google apis .net client library 与 Xamarin 一起使用。 Google apis .net 客户端库不支持 Xamarin。

请参阅问题Investigate Xamarin support #984

我怀疑您至少需要自己编写所有身份验证代码,然后才能使某些类库正常工作。我的调查使我相信库和 Xamarin 的主要问题是授权实现。

服务帐号和 YouTube

YouTube API 不支持服务帐户身份验证,您需要使用 Oauth2 并以这种方式对您的用户进行身份验证。

【讨论】:

    【解决方案2】:

    所以我找到了提供包名称和 SHA1 的正确方法。现在我可以通过应用程序限制正确返回 Json。

    youtubeService.HttpClient.DefaultRequestHeaders.Add("X-Android-Package", AppInfo.PackageName);
    youtubeService.HttpClient.DefaultRequestHeaders.Add("X-Android-Cert","******");
    

    SHA-1 证书指纹在 API 请求标头中发送时,必须采用 不带分号的小写字符串

    有没有办法在代码中获取 SHA1 而不是简单地将其作为字符串?如果有更好的编码方式,请告诉我youtubeService.HttpClient.DefaultRequestHeaders.Add

    我从this post得到了线索。

    【讨论】:

    • 感谢“不带分号的小写字符串”我无法找出问题所在,因为我只是提供了从 .apk 文件中复制的 sha1
    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2016-12-07
    • 1970-01-01
    • 2023-02-10
    相关资源
    最近更新 更多