我正在使用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