Я пытаюсь использовать как локальную учетную запись пользователя, так и Azure Active Directory в моем приложении asp.net core 2.0.
Они оба работают хорошо по отдельности (с активацией только одного из них), но когда я активирую оба из них, аутентификация Azure Active Directory не работает.
Неудачный случай:
После возврата моего веб-приложения из аутентификации на веб-сайте Azure мое веб-приложение User.Identity.IsAuthenticated
имеет значение False
.
Шаги:
- Переадресация клиента на сайт аутентификации Azure со следующим кодом:
public IActionResult LoginWithOpenId(string returnUrl)
{
return Challenge("myAzureAD");
}
- Войдите на сайт Azure.
- Возврат к пути обратного вызова.
- Обратный вызов установить необходимые куки.
IsAuthenticated
все еще Ложь.
Вот код:
Startup.cs
services
.AddDbContext<ApplicationDataContext>(options =>
{
options.UseInMemoryDatabase("testdb");
});
services
.AddIdentity<IdentityUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDataContext>();
services
.AddAuthentication()
.AddOpenIdConnect("myAzureAD", options =>
{
options.ClientId = "xxx";
options.Authority = "https://login.microsoftonline.com/xxx";
options.CallbackPath = "/signin-oidc";
options.RequireHttpsMetadata = false;
})
.AddCookie();
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseAuthentication();
}
AccountController
public IActionResult LoginWithOpenId(string returnUrl)
{
/*This is always false,
if I remove AddIdentity from StartUp class to disable local authentication,
this line is working*/
if (HttpContext.User.Identity.IsAuthenticated)
{
return RedirectToAction("private", "home");
}
else
{
return Challenge("myAzureAD");
}
}