2016-07-28 119 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的缓存,但我不应该这样做...请分享您对此的想法以及您如何认为我可以重置用户和他们的声明以重新开始。谢谢!

回答