我正在使用aspnetcore v2.1(最新的dev分支)来创建一个多租户应用程序,其中每个租户都针对自己的Azure B2C AD租户进行身份验证。选择此方法是为了使电子邮件/密码选择和社交登录关联对每个租户而言都是唯一的。

我想基于当前的租户身份(我根据主机名确定)来应用正确的ClientId和授权,而不是在Startup.ConfigureServices中应用的静态ClientId。根据以前对2.0- *代码的检查,我一直在使用IOptionsSnapshot来允许我如下所示应用正确的选项。

在Startup.ConfigureServices中:

services.AddSingleton<IOptionsSnapshot<OpenIdConnectOptions>, OpenIdConnectOptionsSnapshot>();
services.AddAuthentication().AddCookie().AddOpenIdConnect();


在Startup.Configure中:

app.UseAuthentication();


具有以下实现:

public class OpenIdConnectOptionsSnapshot : IOptionsSnapshot<OpenIdConnectOptions>


但是,现在我发现我的OpenIdConnectOptionsSnapshot不再被实例化或引用。

在AspNetCore Security 2.1.0- *下应用动态的每租户ClientId,授权等的正确方法是什么?

(我乐于接受“您做的完全错误”的建议,并提出了各种不同的方法来为没有预先存在的AzureAD足迹的租户实现多租户的建议)

最佳答案

尝试改用IOptionsMonitor,我们更改了IOptionsSnapshot在2.0后期的工作方式,并切换了身份验证以改为使用监视器。

OptionsSnapshot is now scoped

10-07 18:28