3

クライアント側にAngular2、サーバー側にASP.NET Coreを持っています。私はJavaScriptServices(aspnetcore-spaテンプレート)を使用します。
認証の場合、私はOpenIddictを使用し、例はhereです。ASP.NETコアバックエンドサーバーでGoogleアクセストークンを認証

今、私はコントローラのクラスメソッドで、サーバー側で午前と私はこれがthis側に提案されているのでid_token検証したいと思います:

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 IDを通じてデータベースに追加しました。

私はGoogle API client Library for .NETを使用して、ユーザー情報を取得し、refresh_tokenを保存したいと考えています。数年前、私はPHPでそれを行うことができましたが、.NETでそれを理解することはできません。
ナゲットパッケージをダウンロードします:Google.Apis、Google.Apis.OAuth2.v2、Google.Apis.Plus.v1。

どのクラスを使うべきか、Google ServerKeyを設定する方法、およびgapi.signin2 buttonから得た情報からユーザー情報を取得する方法については、私には必要なナゲットパッケージが不明です。シンプルで


私はGoogleの.NETクライアントライブラリを.NETからid_token検証することができますどのように ?

答えて

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

が、すべてのユーザー情報(画像、表示名、名、姓、誕生日を取得することが可能です...)