2016-07-28 99 views
0

我在構建的站點上運行測試,並嘗試獲取刷新令牌以作爲聲明進行存儲,但始終返回空值。請注意,它以前是DID工作的,但它僅在每個瀏覽器(Chrome,Firefox和Internet Explorer)中第一次有效。C#Google OAuth2 null刷新令牌:如何重新開始?

AccessType在所有測試中設置爲「脫機」。我無處可以指定approval_prompt/ApprovalPrompt來「強制」,無論如何,文檔說將AccessType設置爲「脫機」以獲取刷新標記(這正是我所做的)。

我懷疑連續的空刷新標記與SQLServer數據庫中某處存儲的數據有關,這些數據我找不到,而且我需要刪除。也可能是我無法將ApprovalPrompt/approval_prompt設置爲C#代碼中的「強制」。

場景:

  1. 當我創建在Chrome網站,報名作品和刷新令牌上一個新的用戶提供。要重新檢查,我會刪除用戶和用戶的聲明,然後在Chrome中再次嘗試,但是這次沒有使用相同電子郵件地址註冊嘗試的刷新令牌。

    表用戶/權利要求數據從刪除是:

    aspnet_Applications

    aspnet_Membership

    aspnet_Users

    aspnet_UsersInRoles

    aspnet_Profiles

    [AspNetUserClai MS]

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

我想過清除瀏覽器/火狐/ IE的緩存,但我不應該這樣做...請分享您對此的想法以及您如何認爲我可以重置用戶和他們的聲明以重新開始。謝謝!

回答