Я создал новое веб-приложение. 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-oid c", например. Я хотел бы изменить его на Account / SignIn. Затем я хотел бы перехватить обратный вызов из azure и на основании адреса электронной почты зарегистрированного пользователя я хотел бы изменить токен, добавив некоторые системные роли и сделать перенаправление на соответствующую страницу панели мониторинга в зависимости от роли пользователя. Для администратора и клиента может быть другая панель управления.
Поэтому я попытался изменить "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
рамки.