2

Я реализую поток oAuth в моем asp.net webapi 2. Мне нужно получить разрешение от пользователя на доступ к своим данным аналитики Google. и для этого я добавил ниже области действия при отправке запроса аутентификации в поток google oAuth2.0. В ответ на это я всегда получаю ошибку «Access_Denied», даже пользователь нажимает кнопку «Разрешить доступ» на экране согласия.«Access_Denied» для Google Analytics

Тот же код работает нормально и получает токен внешнего доступа, если я не добавляю Google Analytics в объем.

Также я включил API Google Analytics в консоли разработчика Google.

Google Аналитические Области применения:

googleAuthOptions.Scope.Add(AnalyticsService.Scope.Analytics); 
googleAuthOptions.Scope.Add(AnalyticsService.Scope.AnalyticsReadonly); 
googleAuthOptions.Scope.Add(AnalyticsService.Scope.AnalyticsManageUsers); 

код, написанный в файле startup.cs WebAPI в:

//Configure Google External Login 
GoogleOAuth2AuthenticationOptions googleAuthOptions = new GoogleOAuth2AuthenticationOptions() 
{ 
    ClientId = ConfigurationManager.AppSettings["GoogleClientID"], 
    ClientSecret = ConfigurationManager.AppSettings["GoogleClientSecret"], 
    Provider = new GoogleAuthProvider() 
}; 

//1st trial=> 
//googleAuthOptions.Scope.Add("https://www.googleapis.com/auth/analytics"); 

//2nd trial 
//googleAuthOptions.Scope.Add(AnalyticsService.Scope.Analytics); 
//googleAuthOptions.Scope.Add(AnalyticsService.Scope.AnalyticsReadonly);    
//googleAuthOptions.Scope.Add(AnalyticsService.Scope.AnalyticsManageUsers); 

app.UseGoogleAuthentication(googleAuthOptions); 

метод в контроллере WebAPI в [ExternalLogin]:

[OverrideAuthentication]  
[HostAuthentication(DefaultAuthenticationTypes.ExternalCookie)] 
    [AllowAnonymous] 
    [Route("ExternalLogin", Name = "ExternalLogin")] 
    public async Task<IHttpActionResult> GetExternalLogin(string provider, string error = null) 
    { 
     string redirectUri = string.Empty; 

     if (error != null) 
     { 
      return BadRequest(Uri.EscapeDataString(error)); 
     } 

     if (!User.Identity.IsAuthenticated) 
     { 
      return new ChallengeResult(provider, this); 
     } 

     var redirectUriValidationResult = ValidateClientAndRedirectUri(this.Request, ref redirectUri); 

     if (!string.IsNullOrWhiteSpace(redirectUriValidationResult)) 
     { 
      return BadRequest(redirectUriValidationResult); 
     } 

     ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity); 

     if (externalLogin == null) 
     { 
      return InternalServerError(); 
     } 

     if (externalLogin.LoginProvider != provider) 
     { 
      Authentication.SignOut(DefaultAuthenticationTypes.ExternalCookie); 
      return new ChallengeResult(provider, this); 
     } 

     //IdentityUser user = await _repo.FindAsync(new UserLoginInfo(externalLogin.LoginProvider, externalLogin.ProviderKey)); 

     int profileID = Convert.ToInt32(HttpContext.Current.Request.QueryString["profile_id"]); 

     var user = new UserRepository().SearchProfileByID(profileID); 

     bool hasRegistered = user != null; 

     redirectUri = string.Format("{0}#external_access_token={1}&provider={2}&haslocalaccount={3}&external_user_name={4}", 
             redirectUri, 
             externalLogin.ExternalAccessToken, 
             externalLogin.LoginProvider, 
             hasRegistered.ToString(), 
             externalLogin.UserName); 

     return Redirect(redirectUri); 

    } 

Я следовал this для реализации функции oAuth.

Пожалуйста, помогите мне решить эту проблему.

Благодаря

+0

Вы должны опубликовать весь ваш код, которого недостаточно для отладки вашей проблемы. вы используете клиентскую библиотеку Google? – DaImTo

+0

Hi DalmTo, Спасибо за ответ. Я обновил свой оригинальный вопрос с помощью кода и ссылки. Пожалуйста, дайте мне знать, если вы хотите получить более подробную информацию. –

+0

Пожалуйста, помогите мне решить эту проблему. Я до сих пор не могу решить эту проблему. –

ответ

0

Наконец я получил решение моего вопроса, нам нужно добавить «электронной почты» объем тоже. я добавил ниже 2 областей, чтобы сделать его работу:

googleAuthOptions.Scope.Add("email"); 
googleAuthOptions.Scope.Add("https://www.googleapis.com/auth/analytics.readonly"); 

Это теперь возвращающиеся мне внешний маркер с доступом Google аналитической апи

Благодаря

Виджай

Смежные вопросы