【问题标题】:401 (Unauthorized) Error with DotNetOpenAuth and Google CalendarDotNetOpenAuth 和 Google 日历出现 401(未经授权)错误
【发布时间】:2013-01-15 04:19:00
【问题描述】:

我一直在努力让 Google 日历 API 与 DotNetOpenAuth 一起工作。我尝试了几种不同的方法,但我一直遇到以下错误:

The remote server returned an error: (401) Unauthorized.

我已经通过使用 Google Data API for .NET 中的 CalendarService 以及通过调整 DotNetOpenAuth 示例项目中的 Google Contacts 示例进行了尝试。

当我尝试使用 CalendarService 时,我通过设置身份验证令牌来设置身份验证服务,如下所示:

_service = new CalendarService("CalendarSampleApp");
_service.SetAuthenticationToken(accessToken);

在修改 Google 通讯录示例时,我只是更改了端点以反映 Google 日历端点而不是 Google 通讯录端点,如下所示:

private static readonly MessageReceivingEndpoint GetCalendarEndpoint = new MessageReceivingEndpoint("http://www.google.com/calendar/feeds/default/private/full", HttpDeliveryMethods.GetRequest);

public static XDocument GetCalendarEntries(ConsumerBase consumer, string accessToken, int maxResults/* = 25*/, int startIndex/* = 1*/)
{
    if (consumer == null)
    {
        throw new ArgumentNullException("consumer");
    }

    var extraData = new Dictionary<string, string>() {
        { "start-index", startIndex.ToString(CultureInfo.InvariantCulture) },
        { "max-results", maxResults.ToString(CultureInfo.InvariantCulture) },
    };
    var request = consumer.PrepareAuthorizedRequest(GetCalendarEndpoint, accessToken, extraData);

    // Enable gzip compression.  Google only compresses the response for recognized user agent headers. - Mike Lim
    request.AutomaticDecompression = DecompressionMethods.GZip;
    request.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.151 Safari/534.16";

    var response = consumer.Channel.WebRequestHandler.GetResponse(request);
    string body = response.GetResponseReader().ReadToEnd();
    XDocument result = XDocument.Parse(body);
    return result;
}

当我运行它时,发送的请求如下:

http://www.google.com/calendar/feeds/default/private/full?oauth_token=1/kyuMER6kPiG13pOw5M4NoEE7AJdN2fE4jTKSgaMToT8&oauth_consumer_key=419892106817-obg9lu9j9ihpnlh2e2qa01ber4hmq5mh.apps.googleusercontent.com&oauth_nonce=NtfQzRV3&oauth_signature_method=HMAC-SHA1&oauth_signature=XEdf4ipECY2iBfdQfupD1IK1uFw%3D&oauth_version=1.0&oauth_timestamp=1358213228&start-index=1&max-results=5&gsessionid=TV7D3zHTc7T3l41Xqfn-ig

正如我所说,在这两种情况下,我都会遇到相同的 401 错误。有没有人对我做错了什么有任何想法,或者如何进一步排除故障?

【问题讨论】:

    标签: google-api google-calendar-api dotnetopenauth google-api-dotnet-client


    【解决方案1】:

    我认为您正在使用旧版本的库。 请从以下网址下载最新的稳定版本: https://code.google.com/p/google-api-dotnet-client/wiki/Downloads

    您还应该考虑阅读 OAuth2 的文档: https://code.google.com/p/google-api-dotnet-client/wiki/OAuth2

    希望对你有帮助 埃亚尔

    【讨论】:

    • 我已经下载并引用了最新版本的库 (4.2.1.13026),我遇到了同样的问题。
    • 我误解了上述答案。我以为您在谈论 DotNetOpenAuth 库,但您在谈论 Google API。我确实使用的是旧版本,并且我的问题已通过最新版本解决。谢谢!
    猜你喜欢
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多