302 Перенаправление на ответ провайдера - PullRequest
0 голосов
/ 24 июня 2019

Я использую ASPNET Core Web API 2.3 и внешний поставщик OpenId. Я хочу, чтобы мой API возвращал код состояния 302 и местоположение, на которое перенаправляется в заголовок HTTP.

Мне нужно, чтобы мое приложение (нативное мобильное приложение) взяло URL-адрес и позвонило, чтобы выполнить вход через открытие веб-страницы. Поэтому я не хочу, чтобы перенаправление выполнялось автоматически какой-либо базовой структурой.

Я попытался перезаписать OnRedirectToIdentityProvider обратный вызов

options.Events = new OpenIdConnectEvents
{
    OnRedirectToIdentityProvider = async (ctx) =>
    {
        if (ctx.Request.Path.StartsWithSegments("/api") && ctx.Response.StatusCode == 200)
        {
            var service = await httpClientFactory.CreateClient()
                .GetDiscoveryDocumentAsync(apiOptions.Authority);

            var ru = new RequestUrl(service.AuthorizeEndpoint);
            var url = ru.CreateAuthorizeUrl(
                clientId: apiOptions.ClientId,
                responseType: "code",
                redirectUri: apiOptions.RedirectUri,
                scope: string.Join(" ", apiOptions.Scopes));

            ctx.Response.Redirect(url);
            ctx.HandleResponse();
        }
    }
}

Но это возвращает 200 OK и перенаправление уже выполнено, содержимое уже содержит содержимое цели перенаправления.

Что я здесь не так делаю?

...