Я создал новое веб-приложение .net core 3.1.1 с фреймворком Razor Pages. При создании приложения я установил аутентификацию по умолчанию как AzureAd. Когда я запускаю приложение, аутентификация работает нормально. Сгенерированный файл appsettings выглядит так:
{
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"Domain": "myDomain",
"TenantId": "myTenantId",
"ClientId": "myClientId",
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*"
}
Я создал в своем приложении новый контроллер, который выглядит очень просто, примерно так:
namespace WebApplication1.Controllers
{
public class AccountController : Controller
{
[HttpGet]
public void SignIn()
{
//here comes the logic which checks in what role is the logged User
//the role management stuff will be implemented in the app
}
}
}
Вот так выглядит мой Startup.cs:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication(AzureADDefaults.AuthenticationScheme)
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
services.AddMvc(options =>
{
options.EnableEndpointRouting = false;
});
services.AddRazorPages().AddMvcOptions(options =>{});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/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.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllers();
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Account}/{action=SignIn}");
});
}
}
Я хотел бы иметь возможность изменить AzureAd / CallbackPath на что-то другое, чем «/ signin-oidc», например. Я хочу изменить его на Аккаунт / Вход. Затем я хотел бы перехватить вызов обратного вызова из лазурного и на основе зарегистрированного адреса электронной почты пользователя я хотел бы изменить токен, чтобы добавить некоторые системные роли и сделать перенаправление на соответствующую страницу панели мониторинга на основе роли пользователя. Панель управления для администратора и клиента может быть разной.
Поэтому я попытался изменить "CallbackPath": "/Account/SignIn"
, а также обновил RedirectURI в Azure:
Затем я снова запускаю приложение, устанавливаю точку останова в void SignIn()
, снова вошел в систему, и вместо того, чтобы нажимать /Account/SignIn
, меня просто перенаправили на главную страницу the https://localhost:44321
. Я также попытался вручную запустить https://localhost:44321/Account/SignIn
в браузере и увидел следующее сообщение об ошибке:
An unhandled exception occurred while processing the request.
Exception: OpenIdConnectAuthenticationHandler: message.State is null or empty.
Я попытался проверить, есть ли что-то в документация, но я не нашел ничего полезного. Есть идеи о том, что мне делать, чтобы он работал? Ваше здоровье
РЕДАКТИРОВАТЬ:
Я также использую Microsoft.AspNetCore.Authentication.AzureAD.UI
framework.