Добавление записи в Google Calendar без использования setUserCredentials

#asp.net #dotnetopenauth #google-apps

#asp.net #dotnetopenauth #google-приложения

Вопрос:

Я следую примеру, предоставленному 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. Есть ли способ получить authToken?

Ответ №1:

  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;
    }