Использование AAD B2C со шлюзом приложений (/с Kubernetes) не работает => 404C#

Место общения программистов C#
Ответить
Anonymous
 Использование AAD B2C со шлюзом приложений (/с Kubernetes) не работает => 404

Сообщение Anonymous »

Архитектура

Наши веб-приложения развертываются в нашем кластере Kubernetes, которые интегрируются в наш шлюз приложений через входное расширение (вход Azure Gateway). Если вы перейдете к веб-приложению, вам необходимо войти в систему и пройти аутентификацию через настроенную регистрацию приложения в нашем AAD B2C.
Само веб-приложение размещается на порту 80 в нашем кластер kubernetes, но будет доступен через https внутри нашего шлюза приложений. Шлюз приложений будет иметь необходимые сертификаты и т. д.
В процессе docker-compose (развертывание модулей) включена переменная среды "FORWARDING_HEADERS".
В AAD B2C есть настройте правильные URI перенаправления.
Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI()
.AddJsonOptions(options => options.JsonSerializerOptions.PropertyNamingPolicy = null)
.AddDapr();

services.AddCookiePolicy(options =>
{
options.Secure = CookieSecurePolicy.Always;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.HandleSameSiteCookieCompatibility();
});

services.UseCoCoCore()
.UseCoCoCoreBootstrapper()
.UseCoCoCoreBootstrapper()
//the following line is registering the AuthComponent, see below for more details
.UseCoCoCoreBootstrapper();
}

public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory, ILog logger)
{
loggerFactory.AddSerilog(logger.GetLogger(), dispose: true);
if (!env.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}

app.UseCookiePolicy();
//app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}


AuthComponent.cs
По сути, это так

public void RegisterAuthorization(IConfiguration configuration, string configSectionName, string[] intialScopes)
{
_serviceCollection.AddMicrosoftIdentityWebAppAuthentication(configuration, configSectionName)
.EnableTokenAcquisitionToCallDownstreamApi(intialScopes)
.AddInMemoryTokenCaches();

_serviceCollection.AddAuthorization(options =>
{
options.AddPolicy("IsGroupMember",
policy => { policy.Requirements.Add(new IsGroupMemberRequirement()); });
}););
}

Я использую конфигурацию с этими свойствами
{
"AzureAdB2CConfig": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "myAaadB2c.onmicrosoft.com",
"ClientId": "",
"TenantId": "",
"ClientSecret": "",
"CallbackPath": "/myapp/signin-oidc"
}
}

Что я ожидаю

Переход к нашему https://custom.domain.com/myapp/ должен позволить мне пройти аутентификацию и перенаправить к желаемой точке входа моего веб-приложения, например. https://custom.domain.com/myapp/Overview
Что происходит на самом деле?

Следующие сценарии работают без любые проблемы:
  • Запуск приложения на моем компьютере через локальный хост.
  • Запуск приложения в моем кластере Kubernetes, открыт через LoadBalancer и получаю к нему доступ через общедоступный IP-адрес.
Если я перехожу по следующему URL-адресу https://custom.domain.com/myapp/ , я получаю HttpStatusCode 404. 404 — это «/signin-oidc», который он не может найти. Я проверил через браузер записи заголовка, и для меня все выглядит нормально. Имя хоста моего заголовка также правильное (custom.domain.com).
Дополнительная информация

Конфигурация входящего трафика< /em>
kind: Ingress
apiVersion: networking.k8s.io/v1
metadata:
name: myapp
namespace: myapp-namespace
annotations:
appgw.ingress.kubernetes.io/appgw-ssl-certificate: myCert
appgw.ingress.kubernetes.io/backend-hostname: custom.domain.com
appgw.ingress.kubernetes.io/backend-path-prefix: /
appgw.ingress.kubernetes.io/cookie-based-affinity: 'true'
kubernetes.io/ingress.class: azure/application-gateway
spec:
rules:
- http:
paths:
- path: /myapp/*
pathType: Exact
backend:
service:
name: myapp-service
port:
number: 80


Подробнее здесь: https://stackoverflow.com/questions/714 ... orking-404
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»