我试图在web.config中添加“授权”元素,就像在经典的asp.net中那样:
全球配置-应限制“全局”访问:
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<allow roles="AD\some.user" />
<deny users="*" />
</authorization>
...基于“地点”的配置:
<configuration>
<location path="RelativePath" >
<system.web>
<authorization>
<allow roles="AD\some.user" />
<deny users="*" />
</authorization>
</system.web>
</location>两个版本似乎根本不适用于IIS中托管的aspnet.core。
最有效的办法是:
“全球”:
<configuration>
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="AD\johannes.colmsee" />
</authorization>
</configuration>基于“地点”的:
<configuration>
<location path="RelativePath" >
<system.webServer>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" roles="AD\denis.kopic" />
</authorization>
</security>
</system.webServer>
</location>这个很好用。
关于我的问题:
难道aspnet核心根本不支持“第一版”吗?还是我做错了什么?
发布于 2019-03-20 12:54:59
ASP.NET核心不支持也不使用web.config。发布的web.config仅用于IIS宿主,因为IIS需要这样做。如果您碰巧发布到另一个web服务器,则可以完全放弃web.config。
从已发布的web.config的内容来看,这应该是显而易见的,它是极其赤裸裸的。AspNetCoreHosting模块配置几乎是唯一存在的,这当然是在ASP.NET内部托管ASP.NET内核所必需的。
现在,至于为什么第二个版本真的起作用了,那是因为它被放置在system.webServer内部,这是直接用于IIS配置的,所以IIS在将任何东西传递给ASP.NET核心应用程序之前都是在一个非常高的级别上进行授权。这可能适合您的需要,但这是一种非常粗糙的方法,因为您最终可能需要为不同的路径、用户和授权级别定义许多这样的部分,然后将其与您在ASP.NET核心应用程序中更改的任何内容保持同步。由于IIS只是将其视为静态路径,因此如果移动或重命名任何内容,最终可能会意外地打开安全漏洞,因为IIS尚未配置为授权该新位置。
长和短,您应该删除所有这一切和通过ASP.NET核心应用程序处理授权。仍然支持Windows Auth。
https://stackoverflow.com/questions/55260560
复制相似问题