2011-06-06 34 views
5

Bazı Google API'leriyle birlikte OAuth 2.0 ile biraz oynuyorum. Yetkilendirme süreci oldukça kolay olmasına rağmen, ilk yetkilendirme tamamlandıktan sonra otomatik yetkilendirme ile ilgili bir sorunla karşı karşıyayım. YaniGoogle/OAuth 2 - Otomatik oturum açma

: noktasında 4 At

1. Authorization is done for the first time. (user grants access, I get the token etc etc) 
2. User exits the application 
3. User starts the application again 
4. How to logon automatically here? 

, bir refresh_token var bu yüzden bu request_token kullanarak yeni göstergesi istemek sadece gerekmektedir. Ama hala 401 yetkisiz sonuç almaya devam ediyorum.

Yapmaya çalıştığım şey, uygulamanın her seferinde erişime izin vermek zorunda kalmaması için uygulamamın sessizce oturum açabilmesidir.

cevap

2

Aşağıdaki isteği kullanarak OAuth 2.0 jetonu yenilemek gerekir: Google OAuth 2.0 documentation yılında belirttiği gibi

POST /o/oauth2/token HTTP/1.1 
Host: accounts.google.com 
Content-Type: application/x-www-form-urlencoded 

client_id=21302922996.apps.googleusercontent.com& 
client_secret=XTHhXh1SlUNgvyWGwDk1EjXB& 
refresh_token=1/6BMfW9j53gdGImsixUH6kU5RsR4zwI9lUVX-tqf8JXQ& 
grant_type=refresh_token 

.

Sadece curl kullanarak bunu denedik ve beklendiği gibi çalışır:

curl -d client_id=$CLIENT_ID -d client_secret=$CLIENT_SECRET -d refresh_token=$REFRESH_TOKEN -d grant_type=refresh_token https://accounts.google.com/o/oauth2/token 

{"access_token":"$ACCESS_TOKEN","token_type":"Bearer","expires_in":3600} 
+0

; ama bir şekilde çalışıyor! Teşekkürler – Rhapsody

1

Ben NET'te bunu Google.GData.Client kullanarak. Yetkilendirme sürecine girip jetonları kaydettikten sonra, kullanıcı siteye bir daha geldiğinde bir GOAuthRequestFactory nesnesi oluşturarak yetkilendirmeyi çekiyorum.

public GOAuthRequestFactory GetGoogleOAuthFactory(int id) 
    { 
     // build the base parameters 
     OAuthParameters parameters = new OAuthParameters 
     { 
      ConsumerKey = kConsumerKey, 
      ConsumerSecret = kConsumerSecret 
     }; 

     // check to see if we have saved tokens and set 
     var tokens = (from a in context.GO_GoogleAuthorizeTokens where a.id = id select a); 
     if (tokens.Count() > 0) 
     { 
      GO_GoogleAuthorizeToken token = tokens.First(); 
      parameters.Token = token.Token; 
      parameters.TokenSecret = token.TokenSecret; 
     } 

     // now build the factory 
     return new GOAuthRequestFactory("somevalue", kApplicationName, parameters); 
    } 

Ben istek fabrika sahip olduktan sonra, kullandığım ve böyle bir şey yapmak için izniniz çeşitli API yılların birini çağırabilirsiniz: Ben hala yanlış yaptık bilmiyorum

// authenticate to the google calendar 
CalendarService service = new CalendarService(kApplicationName); 
service.RequestFactory = GetGoogleOAuthFactory([user id]); 

// add from google doc record 
EventEntry entry = new EventEntry(); 
entry.Title.Text = goEvent.Title; 
entry.Content.Content = GoogleCalendarEventDescription(goEvent); 

When eventTime = new When(goEvent.StartTime, goEvent.EndTime.HasValue ? goEvent.EndTime.Value : DateTime.MinValue, goEvent.AllDay); 
entry.Times.Add(eventTime); 

// add the location 
Where eventLocation = new Where(); 
eventLocation.ValueString = String.Format("{0}, {1}, {2} {3}", goEvent.Address, goEvent.City, goEvent.State, goEvent.Zip); 
entry.Locations.Add(eventLocation); 

Uri postUri = new Uri(kCalendarURL); 

// set the request and receive the response 
EventEntry insertedEntry = service.Insert(postUri, entry); 
+0

Bu herhangi bir yerde yayınlanan bir çözüm var mı? – Micah

+1

Bir çözümüm yok, ancak bu size yardımcı olursa Google'ın Oauth'una bağlanma ayrıntılarını içeren başka bir ileti dizisinde yayınladım. http://stackoverflow.com/a/7854919/947898 – uadrive

+0

Teşekkürler! çok takdir! – Micah