Добавление записи в Календарь Google без использования setUserCredentials - PullRequest
0 голосов
/ 09 мая 2011

Я следую примеру, предоставленному приложением Google для Market place, по адресу

http://code.google.com/googleapps/marketplace/tutorial_dotnet.html

Я получил аутентификацию Google, работающую так же, как в примере. Моя следующая задача - добавить записьв календарь Google.Я нашел следующий код для этого, и он также работает нормально

CalendarService service = new CalendarService(APPLICATION_NAME);


            service.setUserCredentials(vUserName, vPassword);

            Google.GData.Calendar.EventEntry entry = new Google.GData.Calendar.EventEntry();

            // Set the title and content of the entry.
            entry.Title.Text = title;
            entry.Content.Content = contents;

            // Set a location for the event.
            Where eventLocation = new Where();
            eventLocation.ValueString = location;
            entry.Locations.Add(eventLocation);

            When eventTime = new When(startTime, endTime);
            entry.Times.Add(eventTime);

            Uri postUri = new Uri("http://www.google.com/calendar/feeds/default/private/full");

            // Send the request and receive the response:
            AtomEntry insertedEntry = service.Insert(postUri, entry);

Проблема, с которой я столкнулся, заключается в следующей строке: если я дам свое имя пользователя и пароль, он будет работать

service.setUserCredentials(vUserName, vPassword);

Я аутентифицировал пользователя, как в примере Google.Так что я не знаю имя пользователя и пароль для входа других пользователей на мой сайт, используя их gmail.

Как мне добавить запись календаря с информацией, которая у меня есть?

Я видел несколькопримеры с RequestFactory, аутентифицирующие пользователя.но не смог найти полный пример, который я могу использовать

1 Ответ

1 голос
/ 20 июля 2011
  1. вам нужно будет создать файл сертификата .pfx, загрузить его в Google и разместить на своем сервере.
  2. создайте свой URL AuthSubRequest

    <asp:HyperLink ID="GotoAuthSubLink" runat="server"/>
    GotoAuthSubLink.Text = "Login to your Google Account"; 
    GotoAuthSubLink.NavigateUrl = AuthSubUtil.getRequestUrl("(return url)http://www.example.com/RetrieveToken", "https://www.google.com/calendar/feeds/", false, true);
    
  3. после того, как человек нажмет на вашу ссылку авторизации, он будет возвращен на ваш обратный URL.получите токен сеанса следующим образом:

    String sessionToken = ""; //Save this for making your calls.
    String certFile = "D:\\websites\\yourwebsite.com\\google.pfx";
    String result = GetAuthSubSessionToken(Request["token"]);
    
    protected AsymmetricAlgorithm GetRsaKey()
    {
        X509Certificate2 cert = new X509Certificate2(certFile, ""); 
        RSACryptoServiceProvider privateKey = cert.PrivateKey as RSACryptoServiceProvider;
        return privateKey;
    }
    
    public string GetAuthSubSessionToken(string singleUseToken)
    {
        string gatStr = "";
        try
        {
            AsymmetricAlgorithm rsaKey = GetRsaKey();
            try
            {
                sessionToken = AuthSubUtil.exchangeForSessionToken(singleUseToken, rsaKey).ToString();
                gatStr = "Session Token = " + SessionToken;
            }
            catch (Exception e)
            {
                gatStr = "Error: I appears that the Google authentication server is experiencing an error. Try the authorizaton link again in a few minutes. <a href=\""
                         + rtnUrl + "\" title=\"" + e.Message + "\">continue</a>";
            }
        }
        catch (Exception E)
        {
            gatStr = "Error: rsa " + E.Message + E.StackTrace;
        }
        return gatStr;
    }
    
  4. сохраните токен сеанса и используйте CreateCalendarService при последующих вызовах для создания службы календаря.

    public CalendarService CreateCalendarService()
    {
        GAuthSubRequestFactory authFactory = new GAuthSubRequestFactory("cl", "YourName-calendarApp-1");
        authFactory.Token = sessionToken;
        authFactory.PrivateKey = GetRsaKey();
        CalendarService cs = new CalendarService(authFactory.ApplicationName);
        cs.RequestFactory = authFactory;
        return cs;
    }
    
...