微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

案例

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

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

设置

  • EPiServer (CMS)
  • .Net 4.7.2 框架

重要说明:

  • 两个开放 id 连接中间件当前都设置为身份验证模式“活动”。

状态

两个 AD 提供商都可以在正确的登录门户显示的地方直接受到挑战,但是有一些我无法解释的问题。使用两个开放 id 连接中间件对我来说是第一次。

问题 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 管道中定义的第一个“活动”中间件,但是它是被命中的第二个中间件。我找不到对这种奇怪行为的任何解释?

解决方法

您需要将后台 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);
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?