我有一个IdentityServer 4设置,使用SaasKit来支持多租户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}";
但是,这显然需要在客户端的config RedirectUri属性中包含相关的租户片段,否则IS4将使重定向uri无效。
虽然我可以使用来自客户端应用程序的动态clientIds,但我不希望在IS4中为每个租户创建一个特定于租户的客户端配置,并处理管理问题。同样,我不希望将所有可能的特定于租户的重定向URI添加到单个客户端的配置中。
相反,是否有可能实现并向IS4注册一些支持以下功能的自定义组件,如果是的话,我应该实现哪些接口?
https://localhost:5000/tenant/{tenant}/signin-oidc发布于 2018-04-17 10:23:40
您可以实现自定义重定向URI验证器。
为此,您需要创建一个实现IRedirectUriValidator的类,然后按如下方式注册它:
services
.AddIdentityServer(...)
.AddRedirectUriValidator<MyCustomUriValidator>();通过这种方式,您可以在数据库中为客户机设置重定向URI,使用一些符号来指定URI中与租户相关的部分,然后在运行时使用自定义验证器检查它。
注意与动态重定向URI相关的危险。
https://stackoverflow.com/questions/49872882
复制相似问题