允许匿名访问 .well-known 目录
allow anonymous access to .well-known directory
请耐心等待:我对这一切都很陌生
我正在致力于将openid connect 与公司开发的一对应用程序集成。
我们正在使用 custom/company 特定的 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>
加上一堆定位节点allow/deny访问具体pages/resources
问题是,当 openid connect 东西试图访问 /.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.
中的某处构建的
我也是新手,但我认为您在该位置提供了一个 .aspx 页面的路径,其余的是 inherited.Just 更改拒绝以允许使用星号的用户。还要确保 web.config 在目录中。听起来像你做的,但众所周知应该是允许所有用户的 web.config。
<?xml version="1.0"?>
<configuration>
<location path="Manage.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
the file seems to be constructed somewhere in Owin.Security.OpenIdConnect.Server
是的,是的。
尝试在注册 OIDC 服务器中间件后立即调用 app.UseStageMarker(PipelineStage.Authenticate)
,以防止 ASP.NET 在它有机会被调用之前应用授权策略:
app.UseOpenIdConnectServer(options => {
options.AllowInsecureHttp = true;
});
app.UseStageMarker(PipelineStage.Authenticate);
请注意,在使用 app.UseStageMarker()
时,web.config
中的 ~/.well-known/openid-configuration
不需要例外。
请耐心等待:我对这一切都很陌生
我正在致力于将openid connect 与公司开发的一对应用程序集成。
我们正在使用 custom/company 特定的 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>
加上一堆定位节点allow/deny访问具体pages/resources
问题是,当 openid connect 东西试图访问 /.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.
中的某处构建的我也是新手,但我认为您在该位置提供了一个 .aspx 页面的路径,其余的是 inherited.Just 更改拒绝以允许使用星号的用户。还要确保 web.config 在目录中。听起来像你做的,但众所周知应该是允许所有用户的 web.config。
<?xml version="1.0"?>
<configuration>
<location path="Manage.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
</configuration>
the file seems to be constructed somewhere in Owin.Security.OpenIdConnect.Server
是的,是的。
尝试在注册 OIDC 服务器中间件后立即调用 app.UseStageMarker(PipelineStage.Authenticate)
,以防止 ASP.NET 在它有机会被调用之前应用授权策略:
app.UseOpenIdConnectServer(options => {
options.AllowInsecureHttp = true;
});
app.UseStageMarker(PipelineStage.Authenticate);
请注意,在使用 app.UseStageMarker()
时,web.config
中的 ~/.well-known/openid-configuration
不需要例外。