Я хочу поддерживать мультитенантные поддомены, где каждый арендатор имеет свой собственный внешний хост, например:
Код: Выделить всё
https://tenant1.localhost:58602/auth/callback
https://tenant2.localhost:58602/auth/callback
Код: Выделить всё
/connect/authorize?
client_id=rf-office
&redirect_uri=https://test.localhost:58602/auth/callback
&response_type=code
&scope=openid profile email api
&code_challenge=...
&code_challenge_method=S256
Код: Выделить всё
rf-officeКод: Выделить всё
desc.RedirectUris.Add(new Uri("https://localhost:58602/auth/callback"));
Код: Выделить всё
o.AddEventHandler(builder =>
builder.UseScopedHandler()
.SetOrder(int.MinValue));
Код: Выделить всё
public class TenantRedirectUriValidator
: IOpenIddictServerHandler
{
public ValueTask HandleAsync(ValidateAuthorizationRequestContext context)
{
if (string.IsNullOrEmpty(context.RedirectUri))
return default;
var pattern =
@"^https?:\/\/([a-z0-9-]+\.)*(localhost|reactiveform\.com)(:[0-9]+)?\/auth\/callback$";
if (Regex.IsMatch(context.RedirectUri, pattern, RegexOptions.IgnoreCase))
{
context.SetRedirectUri(context.RedirectUri);
}
return default;
}
}
Код: Выделить всё
error: invalid_request
error_description: The specified 'redirect_uri' is not valid for this client application.
error_uri: https://documentation.openiddict.com/errors/ID2043
- ID2043 выдается до того, как пользовательская логика проверки сможет одобрить URI.
- Эквивалент DisableRedirectUriValidation отсутствует.
- SetRedirectUri() не помечает URI как доверенный, он только назначает его
Если URI динамического перенаправления намеренно не поддерживаются, какова рекомендуемая архитектура для многопользовательских SPA, которые хотите домены, специфичные для арендаторов?
Подробнее здесь: https://stackoverflow.com/questions/798 ... main-redir
Мобильная версия