Я пытаюсь внедрить аутентификацию WsFederation Azure AD в свое приложение, чтобы пользователи могли войти в систему, как только они попадут в приложение. Однако, когда приложение запускается, оно направляется к экземпляру AAD, но затем зацикливается на пустом экране.
Мое приложение работает на http://localhost:61213/,, в котором я добавил его в качестве ReplyUrl на панели мониторинга регистрации приложений Azure.
Другие ответы на этот вопрос предполагают, что приложение должно работать по протоколу https, однако, когда я попытался реализовать эти изменения, оно все равно не работает.
Есть идеи? Заранее спасибо!
Редактировать
Я изменил приложение, чтобы использовать SSL в VS, поэтому вместо него запускается https. Проблема с циклом сохраняется.
Startup.cs
private void ConfigureAuth(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.Secure = CookieSecurePolicy.SameAsRequest;
});
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultSignInScheme = CookieAuthenticationDefaults.AuthenticationScheme;
sharedOptions.DefaultChallengeScheme = WsFederationDefaults.AuthenticationScheme;
})
.AddCookie(CookieAuthenticationDefaults.AuthenticationScheme,
options =>
{
options.Cookie.Name = ".AspNet.SharedCookie";
options.Cookie.SecurePolicy = CookieSecurePolicy.SameAsRequest;
options.Cookie.SameSite = SameSiteMode.None;
})
.AddWsFederation(options =>
{
options.MetadataAddress =
$"https://login.microsoftonline.com/{aadTenant}/federationmetadata/2007-06/federationmetadata.xml";
options.Wtrealm = wTrealm;
options.Wreply = "http://localhost:61213/";
options.RequireHttpsMetadata = false;
});
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
if (env.IsProduction())
{
app.UseStaticFiles();
app.UseSpaStaticFiles();
}
app.Use(async (context, next) =>
{
if (!context.User.Identity.IsAuthenticated)
{
await context.ChallengeAsync(WsFederationDefaults.AuthenticationScheme);
}
else
{
await next();
}
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
// To learn more about options for serving an Angular SPA from ASP.NET Core,
// see https://go.microsoft.com/fwlink/?linkid=864501
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
app.UseCookiePolicy();
app.UseAuthentication();
}