CMS 设置中的多个开放 ID 连接广告提供商

Posted

技术标签:

【中文标题】CMS 设置中的多个开放 ID 连接广告提供商【英文标题】:Multiple open id connect ad providers in a CMS setup 【发布时间】:2021-07-26 21:03:21 【问题描述】:

案例

目前正在尝试设置两个 AD 提供程序(均使用 OpenID Connect (OIDC) 协议)。

一个需要为后台处理用户,另一个应该在所有其他情况下用于登录具有不同角色的外部用户。网站上的内容仅供特定角色访问。

设置

EPiServer (CMS) .Net 4.7.2 框架

重要提示:

两个 open id connect 中间件当前都设置为身份验证模式“活动”。

状态

可以在正确的登录门户显示的地方直接挑战两个 AD 提供程序,但是有一些我无法解释的问题。使用两个 open id connect middelwares 对我来说是第一次。

问题 1

在 CMS 设置中,某些位置/路径在 web.config 中定义,如下所示

<location path="episerver">
<system.web>
  <authorization>
    <allow roles="WebEditors, WebAdmins, Administrators" />
    <deny users="*" />
  </authorization>
</system.web>

当“/episerver”路径被点击时,它会触发身份验证流程。如果一个中间件已被标记为在管道阶段“身份验证”中运行,则该中间件似乎总是处理此类请求,但是如果两个中间件都注册为在同一管道阶段“身份验证”中运行,则最后注册的中间件(在 owin 启动文件中)似乎总是处理所有请求。这是为什么呢?

问题 2

当第一个中间件注册为身份验证管道阶段运行,而第二个中间件注册为运行后一个管道阶段(未指定时默认为“PreRequestHandlerExecute”)时,会发生另一种奇怪的行为。

当任何分配了“[Authorize]”属性的控制器被请求击中时,我的猜测是第一个中间件会受到挑战,因为它是 Owin 管道中定义的第一个“活动”中间件,但是它是命中的第二个中间件。我找不到任何关于这种奇怪行为的解释?

【问题讨论】:

您是否将 AzureAD 用于后端,将 IdentityServer/Auth0 用于前端?我通常会说多个 OpenID 提供者是一个糟糕的模式,你将如何分配编辑器来编辑非后端部分的内容?我通常会在所有人都可以使用的一个中实现对其他 openid-provider 的信任。例如。设置 IdentityServer 并添加您的 asp.net 身份,将其他 OpenID 提供程序添加到配置中,例如 AzureAD、Facebook、Google 等。 我同时使用 AzureAD 和 Azure B2C AD 作为后端。第一个处理由路径“/episerver”触发的身份验证请求,这将使编辑者能够登录到 CMS 后台。另一个(B2C)目前处理所有其他请求用例,例如我的问题 2 中描述的场景。Owin 的大多数文档只是表明可以注册多个中间件,所以我认为我走在正确的道路上。如果我认为我已经在 azure 中看到了这一点,我会尝试你关于信任对方的建议。结果将只有一个中间件对吗? 【参考方案1】:

您需要将后台 azure 广告配置配置为仅在 /episerver 上触发,而普通用户则在 startup.cs 中的其他所有内容上触发

两者都可以使用相同的 cookie 身份验证设置,但需要 2 个 OpenIdConnectAuthenticationOptions 实例,每个 azure 广告一个。

所以你可以这样做:

app.MapWhen(!ctx.Request.Path.StartsWith("/episerver"), cmsApp => 

  cmsApp.UseOpenIdConnectAuthentication(cmsOptions);

app.Map("/episerver", editorApp => 

  editorApp.UseOpenIdConnectAuthentication(editorOptions);

【讨论】:

我实际上有 2 个 UseOpenIdConnectAuthentication 实例和 2 个 UseCookieAuthentication 实例。每人 1 个。结果是 2 个不同的命名 cookie,具有不同的身份验证类型。我的理解是我需要独特的身份验证类型才能直接挑战它们。 (帐户/登录控制器)。 由于我的 web.config 中定义的内容,1 个中间件似乎已经处理了后台 URL“/episerver”(参见问题 1)。我想知道如果我按照你的建议映射它们会发生什么。

以上是关于CMS 设置中的多个开放 ID 连接广告提供商的主要内容,如果未能解决你的问题,请参考以下文章

PHP、CMS 和谷歌广告营销

如果我们不提供广告,我们可以使用 IDFA

多个表的多个内连接

在Linux CentOS6系统中安装开源CMS程序OpenCart的教程

关于 ios 应用中的广告的说明

微软宣布推出Microsoft Teams个人版 为用户提供无广告的即时通讯服务