Я реализовал пользовательский AuthorizeInteractionResponseGenerator, чтобы включить страницу выбора арендатора в поток входа в систему на основе: IdentityServer4 пользовательского AuthorizeInteractionResponseGenerator
public override async Task<InteractionResponse> ProcessInteractionAsync(ValidatedAuthorizeRequest request, ConsentResponse consent = null)
{
var response = await base.ProcessInteractionAsync(request, consent);
if (response.IsConsent || response.IsLogin || response.IsError)
return response;
if (!request.Subject.HasClaim(c => c.Type == "TenantId" && c.Value != "0"))
return new InteractionResponse
{
RedirectUrl = "/Organization"
};
return new InteractionResponse();
}
После перенаправления на страницу / Organization HttpContext не работает иметь какую-либо информацию о пользователе или претензиях, поскольку пользователь еще не аутентифицирован. Как получить доступ к идентификатору пользователя, чтобы загрузить соответствующий список арендаторов для выбора?
Возможно, уместно: я начал с шаблона веб-приложения angular с отдельными учетными записями пользователей, поэтому при запуске содержится:
services.AddDefaultIdentity<ApplicationUser>(options => options.SignIn.RequireConfirmedAccount = true)
.AddEntityFrameworkStores<ApplicationDbContext>();
services.AddIdentityServer()
.AddApiAuthorization<ApplicationUser, ApplicationDbContext>()
.AddAuthorizeInteractionResponseGenerator<TenantChooserResponseGenerator>();
services.AddAuthentication()
.AddIdentityServerJwt();