3

我在服務器端有客戶端和ASP.NET Core上的Angular2。我使用JavaScriptServices(aspnetcore-spa模板)。
對於身份驗證,我使用OpenIddict,我遵循示例here使用ASP.NET Core後端服務器驗證Google訪問令牌

現在我在控制器類的方法在服務器端,我想驗證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 Core標識。

我想用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獲得的信息獲取用戶信息。

簡單:
如何從.NET驗證id_token與谷歌.NET客戶端庫?

回答

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 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(); 

但也可以讓所有用戶的信息(圖片,顯示的名字,姓氏,名字,生日...)

相關問題