MVC Web应用程序中的混合身份验证模式(匿名和Windows)

时间:2019-02-13 19:57:02

标签: c# asp.net-mvc authentication

我已经尝试过Use Anonymous authentication in MVC4 on single controller when the whole application uses Windows AuthenticaionIIS Mixed Anonymous and Windows Authentication,但到目前为止没有运气能满足我的需要。

我们的网络上有一个MVC应用。在内部,它应该使用Windows身份验证,并且我们在许多视图/控制器上使用[AuthorizeByRole(param[] Role roles)]属性。

但是,我们还需要外部用户能够访问该应用程序。我们有没有AD凭证的承包商和医生,而且移动应用程序使用匿名后端API。

我需要发生的事情: 内部用户:使用Windows身份验证自动登录,简单易用 外部用户:挑战Windows凭据(确实如此)-如果他们单击“取消”,他们将成为匿名用户,并且仍可以查看该应用程序。

现在发生的情况:点击取消会导致它们被重定向到标准asp.net 401页面,而不是看到Guest页面。另外,移动后端只会自动获取401,完全无法访问API。

有什么想法吗?

更多信息

Here is a sample solution I have

在我的web.config中,我有:

    <authentication mode="Windows" />
    <authorization>
      <deny users="?" />
      <allow users="*" />
    </authorization>

在IIS中,我有 authentication settings

在我的API控制器中,我在控制器和[AllowAnonymous]方法上都放了GetKey 在我的手机上,我转到/ api / Auth / GetKey,但我面临输入AD凭据的挑战。当我点击“取消”时,我将被重定向到401页面。

2 个答案:

答案 0 :(得分:1)

如果Controller用[Authorize]属性修饰,则可以通过用[AllowAnonymous]属性修饰单个控制器中的方法,从而将其从授权中排除。

详细了解here

另一方面,您也可以从Controller中删除[Authorize]属性,并仅标记需要授权的方法。

答案 1 :(得分:0)

您必须单独装饰控制器动作,而不是整个控制器。使用[授权]可以执行仅AD用户可以执行的操作,而其他用户则可以不进行匿名用户的装饰。