私が作成したサイトでテストを実行していて、更新トークンを取得してクレームとして保存しようとしていますが、常にnullが返されます。それ以前は動作しなかったことに注意してください。ただし、各ブラウザ(Chrome、Firefox、Internet Explorer)で初めて動作しました。C#Google OAuth2 nullリフレッシュトークン:新しい方法を開始するには?
すべてのテストでAccessTypeが "オフライン"に設定されています。 approval_prompt/ApprovalPromptを "強制"に指定することはできません。そして、ドキュメントでは、AccessTypeを「オフライン」に設定してリフレッシュトークンを取得するように指示しています(これは私がやっていることです)。
私は、連続したヌルリフレッシュトークンが、見つからないSQLServerデータベースのどこかに格納されたデータと関係があり、削除する必要があると考えています。また、C#コード内でApprovalPrompt/approval_promptを "force"に設定することができない可能性があります。
シナリオ:
私はChromeでサイト、登録作品やリフレッシュトークン上に新しいユーザーを作成
が提供されます。再度チェックするには、ユーザーとユーザーの申し立てを削除してChromeでもう一度試しますが、今回は同じメールアドレスの登録試行で更新トークンは表示されません。ユーザ/クレームデータから削除されるテーブルは、次のとおり
aspnet_Applications
aspnet_Membership
aspnet_Users
aspnet_UsersInRoles
aspnet_Profiles
[AspNetUserClai MS]
[AspNetUserLogins]
[AspNetUsers]
困惑ので、私はFirefoxでそれを試してみてください。私は新しいユーザー(同じ電子メールアドレス)を登録し、最初の試行でリフレッシュトークンが提供されます。もう一度チェックするには、ユーザーとユーザーのクレームを削除し、Firefoxでもう一度試してみてください。今回は、同じ電子メールアドレスを使用した次の登録試行でリフレッシュトークンが表示されません。
私はブラウザで一度しか動作しません。私はまだアカウントを登録しようとしていません。だから私はInternet Explorerでもう一度試してみる。私は新しいユーザー(同じ電子メールアドレス)を登録し、最初の試行でリフレッシュトークンが提供されます。しかし、前回と同じように、新しく始めてすべてのユーザーデータとクレームを削除しようとすると、次の登録試行で同じ電子メールアドレスで更新トークンが提供されません。
何が得られますか?古いセッションを認識していますか?すべてのユーザーデータとクレームを完全に削除して、どのブラウザーでも最初に動作したときにリフレッシュトークンを表示できるようにするにはどうすればよいですか、このC#コード内で承認プロンプトを強制しますか?ここで
コードです:
var googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
{
AccessType = "offline",
Caption = "Needs authentication from Google+ to proceed.",
ClientId = "xxx",
ClientSecret = "xxx",
Provider = new GoogleOAuth2AuthenticationProvider()
{
OnAuthenticated = context =>
{
context.Identity.AddClaim(new Claim("GoogleAccessToken", context.AccessToken));
if (!String.IsNullOrEmpty(context.RefreshToken))
{
context.Identity.AddClaim(new Claim("GoogleRefreshToken", context.RefreshToken));
}
context.Identity.AddClaim(new Claim("GoogleUserId", context.Id));
context.Identity.AddClaim(new Claim("GoogleUsername", context.Name));
context.Identity.AddClaim(new Claim("GoogleUserEmail", context.Email));
context.Identity.AddClaim(new Claim("GoogleTokenIssuedAt", DateTime.Now.ToBinary().ToString()));
var expiresInSec = (long)(context.ExpiresIn.Value.TotalSeconds);
context.Identity.AddClaim(new Claim("GoogleTokenExpiresIn", expiresInSec.ToString()));
return Task.FromResult(true);
}
},
SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie
};
googleOAuth2AuthenticationOptions.Scope.Add("https://www.googleapis.com/auth/userinfo.email");
googleOAuth2AuthenticationOptions.Scope.Add("https://www.googleapis.com/auth/consumersurveys");
app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
私はクローム/ Firefoxの/ IEのキャッシュをクリアすることについて考えたが、私はそれを行う必要はありません...これについてのご意見をお寄せください。また、私がユーザーとそのクレームを新しく始めるためにリセットできるとどう思いますか。ありがとう!