Наши веб-приложения развертываются в нашем кластере 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-адрес.
Дополнительная информация
Конфигурация входящего трафика< /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
Мобильная версия