【问题标题】:Insert photo ERROR: The remote server returned an error: (403) Forbidden插入照片错误:远程服务器返回错误:(403)禁止
【发布时间】:2015-06-01 06:38:58
【问题描述】:

我需要你的帮助!

我正在尝试使用 Oauth 2.0 和简单的 HttpRequest 流程将新照片插入 Picasa 相册。结果是我无法按照以下说明在我的 Picasa 网络相册中插入新照片:https://developers.google.com/picasa-web/docs/2.0/developers_guide_protocol#Auth

我还不得不说,我尝试使用他们提供的 .Net 库,结果相同。

我现在使用的实现如下:

public static string PostImage(
       string streamImageConvertedToString)
    {
        string url = string.Format("https://picasaweb.google.com/data/feed/api/user/{0}/albumid/{1}", "username@gmail.com", "idAlbum");

        HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
        request.ContentType = "image/jpeg";
        request.ContentLength = Encoding.UTF8.GetByteCount(data);
        request.Method = "POST";
        request.Headers.Add("GData-Version", "2");
        request.Headers.Add("Slug", "cute_baby_kitten.jpg");
        request.Headers.Add("Authorization", "Bearer " + GetToken());
        if (data != null)
        {
            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
            {
                writer.Write(data);
            }
        }

        HttpWebResponse response = request.GetResponse() as HttpWebResponse;

        string result = string.Empty;
        using (StreamReader reader = new StreamReader(response.GetResponseStream()))
        {
            result = reader.ReadToEnd();
        }

        return result;
    }
 private static string GetToken() {
        const string ServiceAccountEmail = "someid@developer.gserviceaccount.com";

        var servicio = new PicasaService(null);
        var certificate = new X509Certificate2(HttpContext.Current.Server.MapPath("/key2.p12"), "notasecret", X509KeyStorageFlags.Exportable);

        var serviceAccountCredentialInitializer =
            new ServiceAccountCredential.Initializer(ServiceAccountEmail)
            {
                Scopes = new[] { "https://picasaweb.google.com/data/" }
            }.FromCertificate(certificate);

        var credential = new ServiceAccountCredential(serviceAccountCredentialInitializer);

        if (!credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Result)
            throw new InvalidOperationException("Access token request failed.");

        return credential.Token.AccessToken;
    }

欢迎任何帮助!

【问题讨论】:

    标签: c# .net google-oauth picasa


    【解决方案1】:

    (403) 禁止

    表示您正在尝试使用需要授权的方法insert

    您正在连接到服务帐户someid@developer.gserviceaccount.com,这应该可以让您访问someid@developer.gserviceaccount.com 图片。

    您似乎正在尝试访问 username@gmail.com,除非您已授予 someid@developer.gserviceaccount.com 代表 username@gmail.com 插入图片的权限(我什至不确定这是否可能)您将无权执行此操作.

    请记住,服务帐户是 sudo 用户,它有自己的驱动器帐户、日历帐户……它无权访问随机用户数据,除非该用户像其他用户一样授予他们访问权限。

    注意:Google .net 客户端库不支持 gdata API。 Picasa 是一个 gdata 库,我喜欢如何尝试合并这两个我必须对此进行测试。

    【讨论】:

    • 谢谢 DalmTo,我与 someid@developer.gserviceaccount.com 帐户共享了相册,但仍然出现相同的错误。另一方面,您的意思是 someid@developer.gserviceaccount.com 帐户可以使用“notasecret”密码访问 Picasa?
    【解决方案2】:

    您最好(恕我直言)的方法是忘记图书馆并忘记服务帐户。为您尝试插入的 google 用户帐户获取刷新令牌,并使用原始 HTTP REST API 调用 Picasa。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-05
      相关资源
      最近更新 更多