Использование простого ASP.NET Core MVC с шаблоном:
Из cli:
dotnet new mvc --auth SingleOrg --client-id ***** --tenant-id 3**** --domain ***.onmicrosoft.com
Это создает и создает шаблон, все отлично работает на localhost.
При создании и настройке за входом, я получаю бесконечный цикл при попытке входа в систему.
Это мой вход yaml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
annotations:
kubernetes.io/ingress.class: nginx
nginx.ingress.kubernetes.io/rewrite-target: /
nginx.ingress.kubernetes.io/ssl-redirect: "true"
creationTimestamp: "2019-09-11T14:06:56Z"
generation: 3
name: secured-ingress
namespace: default
resourceVersion: "5022818"
selfLink: /apis/extensions/v1beta1/namespaces/default/ingresses/secured-ingress
uid: 69d948fa-d49d-11e9-ac98-3ab4552521b0
spec:
rules:
- host: authpr.westeurope.cloudapp.azure.com
http:
paths:
- backend:
serviceName: newad
servicePort: 80
path: /(.*)
tls:
- hosts:
- authpr.westeurope.cloudapp.azure.com
secretName: aks-authpr
status:
loadBalancer:
ingress:
- {}
При нажатии на URL выше негоперенаправляет меня в Azure AD, затем он бесконечно возвращается к входу в систему.
Чего-то не хватает в коде?
Я прочитал много статей, кажется, что есть много проблемс этим.
Я попытался реализовать: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-3.0&viewFallbackFrom=aspnetcore-2.0
Много играл с файлом startup.cs
, но всегда получал одно и то же поведение.
Бесконечный цикл.
Когда я просматриваю журналы отладки, я всегда вижу:
dbug: Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker[1]
Execution plan of result filters (in the following order): Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.SaveTempDataFilter
info: Microsoft.AspNetCore.Authorization.DefaultAuthorizationService[2]
Authorization failed.
Вот мой текущий startup.cs
файл:
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddMvc(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
})
.SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
if (string.Equals(Environment.GetEnvironmentVariable("ASPNETCORE_FORWARDEDHEADERS_ENABLED"), "true", StringComparison.OrdinalIgnoreCase))
{
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders = ForwardedHeaders.XForwardedFor |
ForwardedHeaders.XForwardedProto;
// Only loopback proxies are allowed by default.
// Clear that restriction because forwarders are enabled by
// explicit configuration.
options.KnownNetworks.Clear();
options.KnownProxies.Clear();
});
}
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
// app.UseHsts();
}
app.Use((context, next) =>
{
context.Request.Scheme = "https";
return next();
});
app.UseForwardedHeaders();
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
// app.Use(async (context, next) =>
// {
// if (context.Request.IsHttps || context.Request.Headers["X-Forwarded-Proto"] == Uri.UriSchemeHttps)
// {
// await next();
// }
// else
// {
// string queryString = context.Request.QueryString.HasValue ? context.Request.QueryString.Value : string.Empty;
// var https = "https://" + context.Request.Host + context.Request.Path + queryString;
// context.Response.Redirect(https);
// }
// });
app.UseMvc(routes =>
{
routes.MapRoute(name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
Ожидаемое поведение должно быть в состояниидля доступа к URL-адресу после успешной аутентификации, может быть, что отсутствует какой-либо конфиг в файле startup.csе