使用Identity Server 4 / asp.net core 2.2覆盖访问被拒绝的路由/路径

时间:2019-06-12 14:23:56

标签: identityserver4 asp.net-core-2.2

Identity Server / ASP Identity非常新,因此我希望我能对情况做充分的解释。

我遇到了一个问题,即如果发现我的Web应用程序未经授权,我的Web应用程序将尝试导航到Account / AccessDenied控制器和操作...但是这种精确的控制器和操作不存在。

我尝试了以下操作,但是我不确定它是否确实在按照我的想法做

    services.ConfigureApplicationCookie(options =>
    {
        options.AccessDeniedPath = $"{config.IDServUrl}/Identity/Account/AccessDenied";
        options.LoginPath = $"{config.IDServUrl}/Identity/Account/Login";
        options.LogoutPath = $"{config.IDServUrl}/Identity/Account/Logout";

    });

我的控制器或其中的操作具有Authorize属性,我使用策略将其锁定。该部分可以正常工作,并且如果用户被授权,则可以成功登录/重定向到应用程序。

如果未经授权,现在会发生什么:

  1. 转到网络应用程序(IDSrv客户端)
  2. 重定向到Identity Server
  3. 登录到Identity Server
  4. 如果未授权,则会显示404错误,因为找不到https://myapp/account/accessdenied

Account/AccessDenied在我的应用程序中不存在,在我的Identity Server应用程序中也不存在。如果用户无权访问某些内容,则Identity Server将使用/Identity/Account/AccessDenied

所有这些都是默认设置-我对此没有做任何更改。

所以我想弄清楚的是要么告诉我的应用去https://MyIDSrvApp/Identity/Account/AccessDenied(因为它已经存在),要么我必须在每个应用中手动创建一个带有AccessDenied Action的帐户控制器由IDSrv保护。

由于我没有在任何地方进行手动设置,因此我对此行为,如何最好地处理以及我的应用程序甚至一开始就从哪里获得/account/accessdenied尚不清楚。

1 个答案:

答案 0 :(得分:0)

在cookie中设置了拒绝访问的默认路径。因此,它是外部身份服务器。要自定义访问被拒绝的路径,请使用AddCookie()上的选项

.AddCookie("Cookies", options => 
{
   options.AccessDeniedPath = "/Account/oops";
})