2017-04-20 101 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

相关问题