Azure active directory CMS设置中的多个open id connect广告提供商

Azure active directory CMS设置中的多个open id connect广告提供商,azure-active-directory,owin,openid-connect,episerver,.net-4.7.2,Azure Active Directory,Owin,Openid Connect,Episerver,.net 4.7.2,案例 目前正在尝试设置两个AD提供程序(都在OpenID Connect(OIDC)协议上) 其中一个需要为后台处理用户,另一个应在所有其他情况下用于登录具有不同角色的外部用户。只有某些角色才能访问网站上的内容 设置 电子服务器(CMS) .NET4.7.2框架 重要注意事项: 两个open id connect中间件当前都设置为身份验证模式“活动” 状态 在正确的登录门户显示的地方,两个广告提供商都可以直接受到质疑,但是有一些问题我无法解释。使用两个开放式id connect中间件对我

案例

目前正在尝试设置两个AD提供程序(都在OpenID Connect(OIDC)协议上)

其中一个需要为后台处理用户,另一个应在所有其他情况下用于登录具有不同角色的外部用户。只有某些角色才能访问网站上的内容

设置

  • 电子服务器(CMS)
  • .NET4.7.2框架
重要注意事项:

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

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

问题1

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

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

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

问题2

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


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

您需要将后台azure ad配置配置为仅在/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);
}

您是否使用AzureAD作为后端,IdentityServer/Auth0作为前端?我通常会说,多个OpenID提供者是一种糟糕的模式,您将如何允许编辑器编辑非后端部件上的内容?我通常会在一个可供所有人使用的openid提供者中实现对其他openid提供者的信任。例如,设置IdentityServer并添加您的asp.net身份,将其他OpenID提供商添加到配置中,如AzureAD、Facebook、Google等。我正在使用AzureAD和Azure B2C广告作为后端。第一个处理路径“/episerver”触发的身份验证请求,这将使编辑能够登录到CMS后台。另一个(B2C)处理当前所有其他请求用例,如我的问题2中描述的场景。Owin的大多数文档只是建议可以注册多个中间件,所以我认为我走的是正确的道路。我会尝试你关于信任对方的建议,前提是我认为我在azure中看到了这一点。结果只有一个中间件,对吗?我实际上有两个UseOpenIdConnectAuthentication实例和两个UseCookieAuthentication实例。每人1个。结果是两个不同的命名cookie,具有不同的身份验证类型。我的理解是,我需要唯一的身份验证类型,以便直接挑战它们。(Account/login controller).1由于my web.config中的定义,中间件似乎已经在处理后台URL“/epserver”(请参见问题1)。我想知道如果我按照你的建议绘制地图会发生什么。