我正在开发一个 POC,以创建一个 Asp.Net Core 6 Web 应用程序,该应用程序能够通过 Azure AD 身份服务器和自定义本地用户数据库对用户进行身份验证。
我需要创建一个登录页面,用户可以在其中选择两种身份验证方法('/Login/Login')。
当我尝试加载非匿名页面(控制器/操作)时,系统会自动将我重定向到 Microsoft 登录页面,而不是我的自定义页面(/Login/Login)。
我尝试过一些解决方案,例如:
builder.Services
.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(options => {...}, configureCookieAuthenticationOptions: options =>
{
options.LoginPath = new PathString("/Login/Login");
})
.EnableTokenAcquisitionToCallDownstreamApi(new[] { "user.read" })
.AddInMemoryTokenCaches();
或
builder.Services.ConfigureApplicationCookie(options => {
options.LoginPath = new PathString("/Login/Login");
});
但似乎没有任何作用。
有什么建议吗?
谢谢!
您可以遵循的解决方法之一;
要使用 ASP.NET Core 应用程序重定向到具有 Microsoft 身份的自定义登录页面,您可以将以下内容添加到您的
startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
// Handling SameSite cookie according to https://learn.microsoft.com/en-us/aspnet/core/security/samesite?view=aspnetcore-3.1
options.HandleSameSiteCookieCompatibility();
});
// Sign-in users with the Microsoft identity platform
services.AddMicrosoftIdentityWebAppAuthentication(Configuration);
services.AddControllersWithViews(options =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
options.Filters.Add(new AuthorizeFilter(policy));
}).AddMicrosoftIdentityUI();
services.AddRazorPages();
}
如需完整设置,请参阅 @amanmcse 的 GitHub 链接。
有关更多信息,请参阅此微软文档|使用 ASP.NET Identity 进行外部身份验证 .
您需要添加
services.Configure<CookieAuthenticationOptions>(options =>
{
options.LoginPath = "/Account/Login";
});
在启动文件中。这将为您的应用程序添加第二个身份验证方案,因此在配置“授权”属性时不要忘记添加第二个方案