Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 当用户在使用ADFS和ASP.NET MVC时未经授权时,将用户重定向到自定义页面_Asp.net Mvc_Adfs - Fatal编程技术网

Asp.net mvc 当用户在使用ADFS和ASP.NET MVC时未经授权时,将用户重定向到自定义页面

Asp.net mvc 当用户在使用ADFS和ASP.NET MVC时未经授权时,将用户重定向到自定义页面,asp.net-mvc,adfs,Asp.net Mvc,Adfs,我的ADFS配置排除了不属于一组组的所有用户 在某些情况下,用户使用ADF登录到web应用(web应用B),并获得一组声明,其中不包含web应用a中接受的任何组 然后,用户转到web应用程序A,被重定向到ADFS,用户已经有了一个用于ADFS的cookie,因此不会要求他提供新的用户/密码组合,并且他会立即将相同的声明(web应用程序B的声明)重定向到web应用程序A 这将触发web应用程序a中的401,这是正确的 我们如何将用户重定向到一个页面来解释刚才发生的事情(使用“使用不同帐户登录”按钮

我的ADFS配置排除了不属于一组组的所有用户

在某些情况下,用户使用ADF登录到web应用(web应用B),并获得一组声明,其中不包含web应用a中接受的任何组

然后,用户转到web应用程序A,被重定向到ADFS,用户已经有了一个用于ADFS的cookie,因此不会要求他提供新的用户/密码组合,并且他会立即将相同的声明(web应用程序B的声明)重定向到web应用程序A

这将触发web应用程序a中的401,这是正确的

我们如何将用户重定向到一个页面来解释刚才发生的事情(使用“使用不同帐户登录”按钮)

作为参考,排除不属于一组组的所有用户的web.config配置为:

<authentication mode="None" />
<authorization>
  <allow roles="GroupA,GroupB,GroupC,GroupD"/>
  <deny users="*" />
</authorization>

为401指定要重定向到的页面:

<customErrors mode="On">
    <error code="401" path="401.cshtml" />
</customErrors>


请在401页中填写授权内容。

指定401的重定向页面:

<customErrors mode="On">
    <error code="401" path="401.cshtml" />
</customErrors>


请在401页面中执行授权操作。

如果有人必须处理此问题,我将以这种方式显示自定义的未经授权页面

创建一个自定义的未授权页面,可能会在那里放置一个注销按钮,我将我的页面放在ErrorController中,并将该操作命名为未授权

第一个“白名单”是web.config中的自定义“您未经授权”页面

<location path="Error/Unauthorized">
    <system.web>
        <authorization>
            <allow Users="*"/>
        </authorization>
    </system.web>
</location>
System.Web.virtualPath实用性在这里非常有用,因为它扩展了~并生成完整的url

location头只是浏览器在收到302响应时使用的头的名称。然后,它将对url执行一个请求,其中url是头值

我确信,
WSFederationAuthenticationModule
可以通过web.config中的设置满足这种情况,但我真的找不到它

以下是web.config中的所有设置,以供参考:

<configuration>
 ...
    <location path="Error/Unauthorized">
        <system.web>
            <authorization>
                <allow Users="*"/>
            </authorization>
        </system.web>
    </location>
    <location path="Home/Logout">
        <system.web>
            <authorization>
                <allow Users="*"/>
            </authorization>
        </system.web>
    </location> 
    <system.web>
        <authentication mode="None" />
        <authorization>
           <allow roles="GroupA,GroupB,GroupC,GroupD"/>
           <deny users="*" />
        </authorization>
        ...
    </system.web>
    <system.identityModel>
    ....

...
...
....

如果有人必须处理此问题,我就是这样显示自定义未经授权的页面的

创建一个自定义的未授权页面,可能会在那里放置一个注销按钮,我将我的页面放在ErrorController中,并将该操作命名为未授权

第一个“白名单”是web.config中的自定义“您未经授权”页面

<location path="Error/Unauthorized">
    <system.web>
        <authorization>
            <allow Users="*"/>
        </authorization>
    </system.web>
</location>
System.Web.virtualPath实用性在这里非常有用,因为它扩展了~并生成完整的url

location头只是浏览器在收到302响应时使用的头的名称。然后,它将对url执行一个请求,其中url是头值

我确信,
WSFederationAuthenticationModule
可以通过web.config中的设置满足这种情况,但我真的找不到它

以下是web.config中的所有设置,以供参考:

<configuration>
 ...
    <location path="Error/Unauthorized">
        <system.web>
            <authorization>
                <allow Users="*"/>
            </authorization>
        </system.web>
    </location>
    <location path="Home/Logout">
        <system.web>
            <authorization>
                <allow Users="*"/>
            </authorization>
        </system.web>
    </location> 
    <system.web>
        <authentication mode="None" />
        <authorization>
           <allow roles="GroupA,GroupB,GroupC,GroupD"/>
           <deny users="*" />
        </authorization>
        ...
    </system.web>
    <system.identityModel>
    ....

...
...
....

不幸的是,这不起作用。在这种情况下使用的实际错误代码是401.2,它似乎与customErrors的401不匹配。另外,我认为它是
重定向
而不是
路径
,并且您不能直接重定向到
.cshtml
页面(没有http处理程序)。控制器操作可以(redirect=“Error/Unauthorized”),但再次尝试,重定向从未发生。不幸的是,这不起作用。在这种情况下使用的实际错误代码是401.2,它似乎与customErrors的401不匹配。另外,我认为它是
重定向
而不是
路径
,并且您不能直接重定向到
.cshtml
页面(没有http处理程序)。控制器操作可以(redirect=“Error/Unauthorized”),但再次尝试,重定向从未发生。