Oauth 2.0 如何在ASP.NET核心MVC OAuth 2.0中获取访问令牌的值

Oauth 2.0 如何在ASP.NET核心MVC OAuth 2.0中获取访问令牌的值,oauth-2.0,asp.net-core-mvc,google-oauth,Oauth 2.0,Asp.net Core Mvc,Google Oauth,在VisualStudio2017RC中,我创建了具有个人用户帐户的ASP.NET核心MVC应用程序,并成功完成了附加Google身份验证的教程。我现在通过我的谷歌帐户登录 我所做的只是在自动生成的代码中添加了几行(在Startup.cs的Configure方法中): 我现在需要获取由谷歌发布的访问令牌的值(并由应用程序存储在cookies中)。然后我将使用它生成XOAuth2密钥来访问Google服务。例如,在HomeController的About方法(由标准向导自动生成)中,我希望显示收件

在VisualStudio2017RC中,我创建了具有个人用户帐户的ASP.NET核心MVC应用程序,并成功完成了附加Google身份验证的教程。我现在通过我的谷歌帐户登录

我所做的只是在自动生成的代码中添加了几行(在Startup.cs的Configure方法中):

我现在需要获取由谷歌发布的访问令牌的值(并由应用程序存储在cookies中)。然后我将使用它生成XOAuth2密钥来访问Google服务。例如,在HomeController的About方法(由标准向导自动生成)中,我希望显示收件箱中未读电子邮件的数量。使用XOAuth2密钥,我可以登录我的Gmail并从这里开始

我怎样才能得到这个代币? -在通过谷歌初次登录时,我是否需要在数据库中存储访问令牌?如果是这样,有什么线索可以在标准向导生成的ASP.NET核心MVC应用程序中实现这一点? -或者,也许我可以从cookies中读取访问令牌?如果是,怎么做

最好是从cookies中读取(无论如何都在那里),避免在数据库中复制此信息,但不确定此方法是否可行(即,是否可以解密)


我曾经为ASP.NET MVC这样做过一次,但在ASP.NET核心MVC中,情况发生了很大变化,遗留代码不再有用。

好的,找到了。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;

您的示例中的信息是什么类型的?我不记得很清楚,但我相信它是
Microsoft.AspNetCore.Identity.ExternalLoginInfo
。您从哪里获得信息?@Murray都在AccountController.ExternalLoginCallback中。例如,有
var info=await\u signInManager.getexternallogininfosync()行。我已经一年多没碰过这个了。也许从那以后,他们又一次改变了事情。
var token = info.AuthenticationTokens.Single(x => x.Name == "access_token").Value;