3

我正在使用 aspnetcore v2.1(最新的开发分支)来创建一个多租户应用程序,其中每个租户都针对他们自己的 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、Authority 等的正确方法是什么?

(我愿意接受“你做错了”以及为没有预先存在 AzureAD 足迹的租户提供实现多租户的不同方法的建议)

4

1 回答 1

1

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

OptionsSnapshot 现在是作用域的

于 2017-08-08T19:26:00.950 回答