我使用SaasKit进行IdentityServer 4设置,以支持多租户URL路径。这允许我以多租户的方式访问单个IS4实例,如下所示:
https://localhost:5000/tenant/tenant1/.well-known/openid-configuration
IS4实例使用单个数据库进行客户端/范围配置,而不是每个租户使用一个数据库。每个租户只分离用户数据库。
我的问题是客户端只有一个配置,因此有一个RedirectUri和PostLogoutRedirectUri,这些值必须是特定于租户的URL路径,否则回调不会在客户端的租户环境中处理应用
因此,我可以在我的客户端应用程序中指定特定于租户的OpenIdConnectOptions,用于CallbackPath,SignedOutCallbackPath和RemoteSignOutPath的新值,例如:像这样:
options.CallbackPath = $"/tenant/{tenant}{options.CallbackPath}";
但显然这需要将相关的租户片段包含在客户端的配置RedirectUri属性中,否则IS4将使重定向uri无效。
虽然我可以使用来自客户端应用程序的动态clientId,但我不希望在IS4中为每个租户创建特定于租户的客户端配置,并处理管理问题。同样,我不希望将所有可能的特定于租户的重定向URI添加到单个客户端的配置中。
相反,是否可以实现并向IS4注册一些支持以下功能的自定义组件,如果需要,我应该实现哪些接口?
https://localhost:5000/tenant/{tenant}/signin-oidc
答案 0 :(得分:0)
您可以实现自定义重定向URI验证程序。
为此,您需要创建一个实现IRedirectUriValidator
的类,然后将其注册为:
services
.AddIdentityServer(...)
.AddRedirectUriValidator<MyCustomUriValidator>();
这样,您可以使用某种表示法为数据库中的客户端设置重定向URI,以指定URI的租户相关部分,然后在运行时使用自定义验证器进行检查。
请注意与动态重定向URI相关的危险。