c# - 如何设置 Microsoft 标识以尊重默认文件名
问题描述
我正在尝试从表单身份验证/成员身份迁移到 asp.net 身份。
我遇到的一个问题:如果我将 LoginPath 设置为“/account/”,注销的用户最终会出现无限重定向循环(不是真的;它会不断扩展 returnURL,直到服务器阻止请求具有过长的查询字符串)。这发生在 上/account/
,但/account/default.aspx
已注销的用户可以访问。我认为问题在于 OWIN 中间件对默认文档的处理方式与表单身份验证/IIS 处理方式不同。目前,“default.aspx”被配置为默认文档。
我尝试设置UseFileServer
用于设置DefaultFileNames
以包含“default.aspx”,但这似乎没有帮助。我也尝试过使用path="." inheritInChildApplications=false"
而不是path="default.aspx"
,但这导致了“配置部分'system.web/authorization'已经定义”异常,大概是因为它与之前的 system.web 声明重叠。
我意识到有几种可能的解决方法:
default.aspx
在路径中容忍:- 使用
MapPageRoutes
而不是依赖默认页面 - 将 web.config 设置为允许 /account 然后使用位置路径手动禁用每个子目录
如果不使用上述要点中的变通方法,是否有办法说服 Microsoft Identity 加载/account/
不需要身份验证?
public void Configuration(IAppBuilder app)
{
app.UseFileServer(new FileServerOptions() {
DefaultFilesOptions = {DefaultFileNames = {"default.aspx"}}});
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/")
});
}
<!--/account/web.config-->
<configuration>
<system.web>
<authorization>
<allow roles="activeuser" />
<deny users="*" />
</authorization>
</system.web>
<location path="Default.aspx">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
</configuration>
解决方案
投票结束我自己的问题作为重复。作为参考,这可以通过修改根 web.config 来解决,如下所示:
<urlMappings>
<add url="~/account/" mappedUrl="~/account/default.aspx"/>
</urlMappings>
不知何故,我在调查这个问题时完全找不到https://stackoverflow.com/a/19154854/18192 。
推荐阅读
- spring-boot - 我们可以在tomcat服务器中部署spring-boot jar吗?
- php - 使用 array_splice 以外的其他方法组合两个数组
- python - Google OAuth 不会在 authlib.starlette_client 中返回 refresh_token
- swift - 错误的文件名快速保存在文档目录中
- javascript - 使用 css 属性将文本换行在两行之后
- java - 关闭舞台后,儿童舞台听众不会被杀死
- java - 如何在 ODL 控制器中配置拒绝服务过滤器
- python - 散景错误:模型“面板”不存在
- laravel - Laravel 雄辩的保存不更新具有双值的字段
- graphdb - 为什么空白节点不作为链接显示在资源页面上?也不显示在可视图表上?