asp.net mvc-C#谷歌OAuth2空刷新令牌:如何重新开始

本文关键字:令牌 重新开始 刷新 net mvc-C# 谷歌 OAuth2 asp | 更新日期: 2023-09-27 17:59:10

我正在构建的一个站点上运行测试,并试图获得一个刷新令牌作为声明存储,但它总是返回null。请注意,它以前确实可以工作,但它只在每个浏览器(Chrome,然后是Firefox,然后是Internet Explorer)中第一次工作。

AccessType IS设置为";脱机";在所有测试中。我在任何地方都不能将approval_prompt/ApprovalPrompt指定为"力";不管怎样,文档说将AccessType设置为"0";脱机";以获得刷新令牌(这就是我正在做的)。

我怀疑连续的null刷新令牌与存储在SQLServer数据库中某个地方的数据有关,这些数据我找不到,需要删除。也可能是我无法将ApprovalPrompt/approvel_prompt设置为";"力";在C#代码中。

场景:

  1. 当我在Chrome中的网站上创建一个新用户时,注册就可以了,并提供了刷新令牌。为了进行双重检查,我删除了用户和用户声明,并在Chrome中重试,但这次在使用相同电子邮件地址的注册尝试中没有给出刷新令牌。

    删除的表格用户/索赔数据为:

    aspnet_Applications

    aspnet_成员

    aspnet_Users

    aspnet_UsersInRoles

    aspnet_Profiles

    [AspNetUserClaims]

    [AspNetUserLogins]

    [AspNetUsers]

  2. 很困惑,所以我在Firefox中尝试了一下。我注册了一个新用户(相同的电子邮件地址),第一次尝试时会提供刷新令牌。为了进行双重检查,我删除了用户和用户声明,并在Firefox中重试,这次在使用相同电子邮件地址的以下注册尝试中没有给出刷新令牌。

  3. 我想到目前为止,它只会在我还没有尝试注册帐户的浏览器中工作一次。所以我用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);

我想过清除Chrome/Firefox/IE缓存,但我不应该这么做。。。请分享你对此的想法,以及你认为我如何重置用户和他们的声明,让他们重新开始。谢谢

asp.net mvc-C#谷歌OAuth2空刷新令牌:如何重新开始

想明白了。

  1. 登录Google并访问应用程序权限页面:https://security.google.com/settings/security/permissions?pli=1

  2. 一到那里,我就撤销了对我的电子邮件帐户的令牌的访问权限。

  3. 当我再次运行我的应用程序时,它"强迫"我同意访问/权限,然后还为我提供了刷新令牌!

希望这能帮助任何遇到类似问题的人。