Изменение типа ответа C# Owin с кода на токен

Я пытаюсь использовать OWIN для внешнего входа в Google / Facebook.

Проблема заключается в том, что проблема owin постоянно меняет тип ответа с токена на код.

Вызов создает следующий URL:
https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=client_dim&redirect_uri=mywebsite.com&scope=scope&state=state

Это возвращает ошибку от google. Если я изменяю response_type на token (response_type=token), он работает.

Вот параметры OAuth

 OAuthOptions = new OAuthAuthorizationServerOptions
        {

            TokenEndpointPath = new PathString("/Token"),
            Provider = new ApplicationOAuthProvider(PublicClientId),
            AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
            AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),

            // In production mode set AllowInsecureHttp = false
            AllowInsecureHttp = true,


        };

Настройка промежуточного ПО Google:

 app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
        {
            ClientId = "clientid",
            ClientSecret = "client secret",  
        }); 

Вот задача:

   var properties = new AuthenticationProperties() {   AllowRefresh = true, RedirectUri="mywebsite.co.za"  };


        Request.GetOwinContext().Authentication.Challenge(properties,LoginProvider);

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Unauthorized);
        response.RequestMessage = Request;
        return Task.FromResult(response);

OWIN-это базовая настройка из универсального проекта MVC API.

1 ответ

  1. Решение для перезаписи response_type в token следующее:

     GoogleOAuth2AuthenticationOptions googleOAuth2AuthenticationOptions = new GoogleOAuth2AuthenticationOptions
            {
                ClientId = "clientid",
                ClientSecret = "secret",
    
                Provider = new GoogleOAuth2AuthenticationProvider
                {
                    OnApplyRedirect = context =>
                    {
                        string redirect = context.RedirectUri.Replace("response_type=code", "response_type=token");
                        context.Response.Redirect(redirect);
                    },
    
                },
            };
    
            app.UseGoogleAuthentication(googleOAuth2AuthenticationOptions);
    

    Это по-прежнему вызывает вопрос, если google OAuth 2.0 требует response_type=token, почему Owin.Google provider use response_type=code.