使用 ASP.NET 核心后端服务器验证 Google 访问令牌

Authenticate Google access token with ASP.NET Core backend server

我在客户端有 Angular2,在服务器端有 ASP.NET Core。我使用 JavaScriptServices(aspnetcore-spa 模板)。
对于身份验证,我使用 OpenIddict and I follow example .

现在我在 Controller class 方法的服务器端,我想验证 id_token 因为这是 this 端的建议:

Important: Do not use the Google IDs returned by getId() or the user's profile information to communicate the currently signed in user to your backend server. Instead, send ID tokens, which can be securely validated on the server.

我还想通过 ASP.NET 核心身份在我的数据库中注册用户(保存电子邮件、个人资料...)。

我想使用Google API client Library for .NET获取用户信息并存储refresh_token。几年前,我设法用 PHP 做到了,但我无法用 .NET 弄明白。
我下载了 nuget 包:Google.Apis、Google.Apis.OAuth2.v2、Google.Apis.Plus.v1.

我不确定我需要哪个 nuget 包,我应该使用哪个 class,如何设置 Google ServerKey 以及如何从我从 [= 获得的信息中获取用户信息17=].

简单来说:
如何使用 Google .NET 客户端库从 .NET 验证 id_token?

我找到了解决方案 here。它很旧,但它有效。

var googleInitializer = new BaseClientService.Initializer();
googleInitializer.ApiKey = this.config["Authentication:Google:ServerKey"];
Oauth2Service ser = new Oauth2Service(googleInitializer);
Oauth2Service.TokeninfoRequest req = ser.Tokeninfo();
req.AccessToken = request.AccessToken;  //access token received from Google SignIn button
Tokeninfo userinfo = await req.ExecuteAsync();

我不知道如何在服务器上获取显示名称和图片。但是可以在客户端完成:

onGoogleLoginSuccess(user: gapi.auth2.GoogleUser)
{
    console.log("basic profile", user.getBasicProfile());
}

如果有人知道更多更新的解决方案或如何在服务器上检索基本用户配置文件,请分享。

另外我可以用Google+,但是要小心因为Google账号不是Google+账号。我没有 + 帐户并收到错误消息:

Google.Apis.Requests.RequestError Not Found [404] Errors [ Message[Not Found] Location[ - ] Reason[notFound] Domain[global] ]

在代码中:

var plusService = new PlusService(googleInitializer);
Person me = await plusService.People.Get(userinfo.UserId).ExecuteAsync();

但可以获取所有用户信息(图片、显示名称、名字、姓氏、生日...)