Я использую 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
и перенаправление уже выполнено, содержимое уже содержит содержимое цели перенаправления.
Что я здесь не так делаю?