允许匿名访问.well-已知目录

时间:2016-05-05 21:19:41

标签: asp.net web-config openid-connect aspnet-contrib

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

我正在努力将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 connect stuff试图访问/.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中构建的。

2 个答案:

答案 0 :(得分:1)

  

该文件似乎是在Owin.Security.OpenIdConnect.Server中构建的

是的,是的。

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

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

app.UseStageMarker(PipelineStage.Authenticate);

请注意,使用~/.well-known/openid-configuration时,web.config中的app.UseStageMarker()不应该例外。

答案 1 :(得分: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>