OpenIddict 4.x ID2043 — Можно ли поддерживать динамический поддомен клиента redirect_uri?C#

Место общения программистов C#
Ответить
Anonymous
 OpenIddict 4.x ID2043 — Можно ли поддерживать динамический поддомен клиента redirect_uri?

Сообщение Anonymous »

Я использую OpenIddict 4.x с ASP.NET Core и кодом авторизации + потоком PKCE для SPA.
Я хочу поддерживать мультитенантные поддомены, где каждый арендатор имеет свой собственный внешний хост, например:

Код: Выделить всё

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
) имеет зарегистрированные URI перенаправления, но только канонические, например:

Код: Выделить всё

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
При проверке источника OpenIddict это выглядит следующим образом:
  • ID2043 выдается до того, как пользовательская логика проверки сможет одобрить URI.
  • Эквивалент DisableRedirectUriValidation отсутствует.
  • SetRedirectUri() не помечает URI как доверенный, он только назначает его
Возможно ли в OpenIddict 4.x поддерживать подстановочные знаки или URI динамического перенаправления (например, субдомены арендатора) или единственным поддерживаемым подходом является использование фиксированных, явно зарегистрированных URI перенаправления для каждого клиента?
Если URI динамического перенаправления намеренно не поддерживаются, какова рекомендуемая архитектура для многопользовательских SPA, которые хотите домены, специфичные для арендаторов?

Подробнее здесь: https://stackoverflow.com/questions/798 ... main-redir
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»