使用ASP.NET Core后端服务器

时间:2017-02-16 10:06:22

标签: asp.net-core google-signin google-api-dotnet-client google-plus-signin google-oauth-.net-client

我在客户端上使用Angular2,在服务器端使用ASP.NET Core。我使用JavaScriptServices(aspnetcore-spa模板) 对于身份验证,我使用OpenIddict,然后按照示例here

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

  

重要提示:请勿使用getId()或用户返回的Google ID   用于与当前登录用户进行通信的配置文件信息   你的后端服务器。相反,发送ID令牌,这可以是安全的   在服务器上验证。

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

我想使用Google API client Library for .NET 获取用户信息并存储refresh_token。几年前我设法用PHP做到了,但我无法用.NET解决这个问题 我下载了nuget软件包:Google.Apis,Google.Apis.OAuth2.v2,Google.Apis.Plus.v1。

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

简单来说:
如何使用Google .NET Client库验证.NET中的id_token?

1 个答案:

答案 0 :(得分:2)

我找到了解决方案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 [404]错误[     消息[未找到]位置[ - ]原因[notFound]域[全局]]

代码:

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

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