2017-04-20 22 views
1

Visual Studio 2017RCでは、個々のユーザーアカウントでASP.NET Core MVCアプリケーションを作成し、https://docs.microsoft.com/en-us/aspnet/core/security/authentication/social/google-loginsチュートリアルを完了してGoogle認証を添付しました。私は今私のGoogleアカウントを介してログインしています。ASP.NET Core MVC OAuth 2.0でアクセストークンの値を取得する方法

私は(Startup.csの設定方法で)自動生成されたコードに数行を追加しましたでしたすべて:

app.UseGoogleAuthentication(new GoogleOptions 
{ 
    ClientId = "xxxx.apps.googleusercontent.com", 
    ClientSecret = "xxxx", 
    Scope = { "email", "openid" } 
}); 

私は今、Googleが発行されたアクセストークンの値を取得する必要があります(とアプリによってクッキーに保存されます)。それを使ってGoogleサービスにアクセスするためのXOAuth2キーを生成します。たとえば、HomeControllerのAboutメソッド(標準ウィザードで自動生成)では、受信トレイに未読メールの数を表示したいとします。 XOAuth2キーを使用してGmailにログインし、ここから進めることができます。

このトークンはどのように入手できますか? - Google経由で初めてログインするときにアクセストークンをデータベースに保存する必要はありますか?もしそうなら、標準的なウィザードで生成されたASP.NET Core MVCアプリケーションでこれをどうやって行うことができるのか? - または、私は常にクッキーからアクセストークンを読むことができますか?もしそうなら、どうですか?

好ましくは、私はクッキーから読み込み(とにかくそこにいる)、この情報をデータベースに複製しないようにしますが、このアプローチが実行可能かどうか(つまり、解読できるかどうか)はわかりません。

私はこれをASP.NET MVCで一度だけ行いましたが、ASP.NET Core MVCでは多くの変更がありました。従来のコードはもう使用できません。

答えて

6

OK、見つけました。 SaveTokensプロパティはトリックです。

app.UseGoogleAuthentication(new GoogleOptions 
{ 
    ClientId = "xxxx.apps.googleusercontent.com", 
    ClientSecret = "xxxx", 
    Scope = { "email", "openid" }, 
    SaveTokens = true, 
    AccessType = "offline" 
}); 

私はその後、あなたの例では情報が何であるかをタイプAccountController.ExternalLoginCallback

var token = info.AuthenticationTokens.Single(x => x.Name == "access_token").Value; 
+0

にアクセストークンを取得することができますか? – conterio

+0

私は正確に覚えていませんが、私はそれが 'Microsoft.AspNetCore.Identity.ExternalLoginInfo'だと思います。 – Alex

+0

どこから情報を取得しますか? – Murray

関連する問題