2

请耐心等待:我对这一切都很陌生

我正在将 openid connect 与该公司开发的一对应用程序集成在一起。

我们正在使用自定义/公司特定的 openid 连接库,我认为这些库本质上是围绕 Microsoft.Owin.Security.OpenIdConnect 和 Owin.Security.OpenIdConnect.Server 的包装器

在 idP 应用程序 web.config 中,我们有类似的内容:

<location path="." inheritInChildApplications="false">
    <authentication mode="Forms">
        <forms loginUrl="~/Login" name="{....}" protection="All" path="/" slidingExpiration="true" requireSSL="false" defaultUrl="~/Home" cookieless="UseCookies" />
    </authentication>
    <authorization>
        <deny users="?" />
        <!-- denies anonymous users to all pages, except those defined under location nodes -->
    </authorization>
</location>

加上一堆位置节点来允许/拒绝访问特定页面/资源

问题是,当用户未登录(或者,它似乎正在登录过程中)时,当 openid 连接的东西尝试访问 /.well-known/openid-configuration 时,响应是 302 重定向到登录页

显然,当需要 JSON 响应时,这会导致问题

我尝试将位置节点添加到 web.config:

<location path= "~/.well-known/openid-configuration">
    <system.web>
        <authorization>
            <allow users="*" />
        </authorization>
    </system.web>
</location>

(我也尝试使用 path = "~/.well-known")

但我仍然被重定向到登录页面

需要明确的是,idP 应用程序中没有实际的目录 /.well-known;该文件似乎是在 Owin.Security.OpenIdConnect.Server 中的某处构建的。

4

2 回答 2

1

该文件似乎是在 Owin.Security.OpenIdConnect.Server 的某个地方构建的

是的。

尝试app.UseStageMarker(PipelineStage.Authenticate)在注册 OIDC 服务器中间件后立即调用,以防止 ASP.NET 在有机会被调用之前应用授权策略:

app.UseOpenIdConnectServer(options => {
    options.AllowInsecureHttp = true;
});

app.UseStageMarker(PipelineStage.Authenticate);

请注意~/.well-known/openid-configurationweb.config使用app.UseStageMarker().

于 2016-05-06T03:23:26.700 回答
0

我也很新,但我认为您是该位置的 .aspx 页面的路径,其余部分是继承的。只需更改拒绝以允许使用 asterix 的用户。还要确保 web.config 在目录中。听起来像你,但众所周知的应该是允许所有用户的 web.config。

<?xml version="1.0"?>
<configuration>

  <location path="Manage.aspx">
    <system.web>
      <authorization>
        <deny users="?"/>
      </authorization>
    </system.web>
  </location>
</configuration>
于 2016-05-05T21:25:29.013 回答