簡體   English   中英

C#Google OAuth2空刷新令牌:如何重新開始?

[英]C# Google OAuth2 null Refresh Tokens: How to start fresh?

我在自己構建的網站上運行測試,並嘗試獲取刷新令牌以作為聲明存儲,但它始終返回null。 請注意,它以前是DID起作用的,但是只有在每種瀏覽器(Chrome,然后是Firefox和Internet Explorer)中才第一次起作用。

在所有測試中,AccessType IS都設置為“離線”。 我在哪里都無法將rovaling_prompt / ApprovalPrompt指定為“強制”,並且無論如何,文檔說將AccessType設置為“ offline”以獲取刷新令牌(這就是我正在做的事情)。

我懷疑連續的空刷新令牌與存儲在SQLServer數據庫中某個我找不到,需要刪除的數據有關。 我也可能無法在C#代碼中將ApprovalPrompt / approval_prompt設置為“ force”。

場景:

  1. 當我在Chrome中的網站上創建新用戶時,注冊有效並且提供了刷新令牌。 要仔細檢查,我刪除了用戶和用戶聲明,然后在Chrome中重試,但是這次在嘗試使用相同電子郵件地址進行注冊時未提供刷新令牌。

    表用戶/聲明數據從以下位置刪除:

    aspnet_Applications

    aspnet_Membership

    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緩存,但我不必這么做...請分享您對此的想法以及您如何認為我可以重設用戶及其聲稱重新開始。 謝謝!

想通了。

  1. 登錄Google並訪問了應用程序權限頁面: https : //security.google.com/settings/security/permissions?pli=1

  2. 到達那里后,撤消了對我的電子郵件帳戶的令牌的訪問權限。

  3. 當我再次運行我的應用程序時,它“強迫”我這次同意訪問/權限,然后還為我提供了刷新令牌!

希望這對遇到類似問題的所有人有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM