0

我正在尋找任何有關使用OWIN庫獲取refresh_token的建議。OAUTH2(OPENID連接)+ MVC 5.刷新令牌問題

我按照文章http://www.asp.net/mvc/tutorials/mvc-5/create-an-aspnet-mvc-5-app-with-facebook-and-google-oauth2-and-openid-sign-on

所有東西的作品甜蜜。但沒辦法,至少我不知道方式,檢索refresh_token

我試圖添加「access_offline」到初始請求,沒有什麼用處。我絕對做錯了什麼。

爲什麼我需要它? - 我試圖鏈接Google Glass + MVC5 + OWIN的功能。

p.s.我會很感激任何使用Google.Api.Auth構建的工作示例鏈接。

謝謝。

+0

我知道這可能爲時已晚,但走alook:http://stackoverflow.com/questions/24894789/how-to-renew-該訪問令牌使用該刷新令牌/ 24972426#24972426 –

回答

1
+0

謝謝,好帖子。一個問題:我無法理解將DataStore設置爲FileStore的設計理念。例如,你是否知道任何EF實現,就像你在博客中提到的那樣? –

+0

我的下一個任務之一是有EF實施。請記住它是一個開源項目,所以如果你找到一個好的解決方案,請告訴我,我很樂意看看它並將其添加到存儲庫。現在我決定只實現.net 4.0,WP和WinRT的基本功能。我爲那個問題開了一個新問題 - https://code.google.com/p/google-api-dotnet-client/issues/detail?id=453 – peleyal

+0

我明白了,謝謝。我已經嘗試過你的示例,並且仍然堅持獲得「訪問/刷新標記」。正如我可以看到例如FileDataStore,與url'http:// localhost:49244/Home/DriveAsync86747631'相同。無法弄清楚這是什麼。我絕對不能將它傳遞給Google MirrorApi for .net。有任何想法嗎? –

1

是啊,有一個在卡塔納項目與此相關的一個懸而未決的問題:

https://katanaproject.codeplex.com/workitem/227

總之,它需要更簡單。

+0

謝謝,有用的鏈接。不幸的是,我已經按照評論中的建議嘗試過了。沒有更改,也嘗試過3.0-alpha - 沒有運氣。 感覺有點失望,看到如katana owin這樣的大框架,沒有明顯的東西,如簡單而靈活的方式檢索密鑰。 –

0

您可以在這個帖子使用這樣的代碼

app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions() 
{ 
    ClientId = "YOUR_CLIENT_ID", 
    ClientSecret = "YOUR_CLIENT_SECRET", 
    AccessType = "offline", 
    Provider = new GoogleOAuth2AuthenticationProvider() 
    { 
     OnAuthenticated = (context) => 
     { 
      TimeSpan expiryDuration = context.ExpiresIn ?? new TimeSpan(); 
      context.Identity.AddClaim(new Claim("urn:tokens:google:email", context.Email)); 
      context.Identity.AddClaim(new Claim("urn:tokens:google:url", context.GivenName)); 
      if (!String.IsNullOrEmpty(context.RefreshToken)) 
      { 
       context.Identity.AddClaim(new Claim("urn:tokens:google:refreshtoken", context.RefreshToken)); 
      } 
      context.Identity.AddClaim(new Claim("urn:tokens:google:accesstoken", context.AccessToken)); 
      context.Identity.AddClaim(new Claim("urn:tokens:google:accesstokenexpiry", DateTime.Now.Add(expiryDuration).ToString())); 

      return Task.FromResult(0); 
     } 
    } 
});