【问题标题】:Override Access Denied route/path with Identity Server 4/asp.net core 2.2使用 Identity Server 4/asp.net core 2.2 覆盖拒绝访问的路由/路径
【发布时间】:2019-10-27 02:27:46
【问题描述】:

身份服务器/ASP 身份非常新,所以我希望我能很好地解释这种情况。

我遇到了一个问题,即我的网络应用程序尝试导航到 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. 转到 Web 应用程序(IDSrv 客户端)
  2. 重定向到身份服务器
  3. 登录身份服务器
  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,因为我没有在任何地方手动设置它。

【问题讨论】:

  • 您是否尝试在 AddCookie() 内的 cookie 的身份验证方案中配置这些路径?另外,我至少可以告诉您,拒绝访问 url 的模板是 Request.Scheme + "://" + Request.Host + OriginalPathBase + targetPath;,其中 targetPath 是您在选项中的 url。这是来自默认的 cookie 身份验证处理程序 (github.com/aspnet/AspNetCore/blob/master/src/Security/…)。

标签: identityserver4 asp.net-core-2.2


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2017-12-12
    • 2013-12-15
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    • 2021-04-13
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多