2017-04-20 100 views
1

在Visual Studio 2017RC中,我創建了具有單獨用戶帳戶的ASP.NET Core MVC應用程序,併成功完成了https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-logins教程以附加Google身份驗證。我現在通過我的Google帳戶登錄。如何在ASP.NET Core MVC OAuth 2.0中獲取訪問令牌的值

我所做的只是添加幾行自動生成的代碼(在Startup.cs的配置方法):

app.UseGoogleAuthentication(new GoogleOptions 
{ 
    ClientId = "xxxx.apps.googleusercontent.com", 
    ClientSecret = "xxxx", 
    Scope = { "email", "openid" } 
}); 

我現在需要得到這是由谷歌發出的訪問令牌的值(和存儲在Cookie中)。然後,我將使用它來生成XOAuth2密鑰以訪問Google服務。例如,在HomeController的About方法(由標準嚮導自動生成)中,我想顯示收件箱中未讀郵件的數量。使用XOAuth2密鑰,我可以登錄我的Gmail並從此處繼續。

我怎樣才能得到這個令牌? - 我需要通過Google初始登錄時將訪問令牌存儲在數據庫中嗎?如果是這樣,任何線索如何可以在標準的嚮導生成的ASP.NET Core MVC應用程序中做到這一點? - 或者,我可以隨時從cookies中讀取訪問令牌?如果是這樣,怎麼樣?

最好我從cookies(無論如何)讀取它並避免在數據庫中重複此信息,但不確定此方法是否可行(即是否可以解密)。

我爲ASP.NET MVC做了一次,但在ASP.NET Core MVC中發生了很大的變化,遺留代碼已經無用了。

回答

6

好的,找到它了。 SaveTokens屬性可以做到這一點。

app.UseGoogleAuthentication(new GoogleOptions 
{ 
    ClientId = "xxxx.apps.googleusercontent.com", 
    ClientSecret = "xxxx", 
    Scope = { "email", "openid" }, 
    SaveTokens = true, 
    AccessType = "offline" 
}); 

然後我就可以得到訪問令牌在AccountController.ExternalLoginCallback

var token = info.AuthenticationTokens.Single(x => x.Name == "access_token").Value; 
+0

是什麼類型在你的榜樣信息? – conterio

+0

我不記得確切,但我相信它是'Microsoft.AspNetCore.Identity.ExternalLoginInfo'。 – Alex

+0

你從哪裏得到信息? – Murray

相關問題