7

我在客户端有 Angular2,在服务器端有 ASP.NET Core。我使用JavaScriptServices(aspnetcore-spa 模板)。
对于身份验证,我使用OpenIddict并在此处遵循示例。

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

重要提示:请勿使用 getId() 返回的 Google ID 或用户的个人资料信息将当前登录的用户与您的后端服务器通信。相反,发送可以在服务器上安全验证的 ID 令牌。

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

我想使用.NET 的 Google API 客户端库 来获取用户信息并存储 refresh_token。几年前,我设法用 PHP 做到这一点,但我无法用 .NET 解决。
我下载 nuget 包:Google.Apis、Google.Apis.OAuth2.v2、Google.Apis.Plus.v1。

我不确定我需要哪个 nuget 包,我应该使用哪个类,如何设置 Google ServerKey 以及如何从我从gapi.signin2 button获得的信息中获取用户信息。

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

4

1 回答 1

4

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

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 [404] 错误 [ 消息 [未找到] 位置 [ - ] 原因 [未找到] 域 [全局] ]

在代码中:

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

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

于 2017-02-16T16:07:50.307 回答