В настоящее время у нас есть API, который требует многопользовательской аренды.После успешного входа в систему мы выдаем всех доступных арендаторов пользователю, но когда пользователь решает сменить арендатора, я начинаю сталкиваться с проблемами, в которых контекст клиента пытается получить доступ к ресурсу.
Я думал, что при смене арендатора я могу просто предложить ChallengeResult()
, а затем в IdentityServer обработать это, чтобы проверить, к какому арендатору пользователь хочет получить доступ, а затем выдать новый токен с утверждением «ChosenTenant» (или что-то в этом роде).Примерно так:
var authProps = new AuthenticationProperties();
authProps.SetString("CurrentTenantId", response.Result.Id.ToString());
authProps.RedirectUri = "/#home";
return new ChallengeResult(authProps);
Однако на самом деле это не работает, поскольку ChallengeResult просто попадает в конечную точку IdentityServers " / connect / authorize " и затем возвращается в мое приложение.У меня есть реализация IProfileService в нашем IdentityServer, но я не могу получить доступ к ранее выданным AuthenticationProperties.
public async Task GetProfileDataAsync(ProfileDataRequestContext context)
{
var sub = context.Subject.FindFirst("sub").Value;
context.IssuedClaims = await _userStore.GetClaimsForUser(sub, context.RequestedClaimTypes, context.Client.ClientId);
return;
}
Тогда у меня возникает вопрос: как я могу перехватить или сделать некоторую собственную внутреннюю логику при нажатии /подключить / авторизацию ?Или, может быть, я поступаю неправильно?