授权callback / redirect_url路由到clientside路由,导致递归调用

时间:2017-12-19 20:25:55

标签: openid identityserver4 asp.net-core-2.0 angular5 oidc

我正在使用带有IdentityServer 4和Angular 5.0的asp.net core 2.0。

我的项目基于此示例:

https://github.com/scottbrady91/Angular4-OidcClientJs-Example

当用户成功登录时,他会被重定向到确定的授权回拨。

在Scott Brady的样本中,客户路线被称为:

  {
    path: 'auth-callback',
    component: AuthCallbackComponent,
  },

到目前为止一切正常。

但是......我的真实应用程序只有受保护的路由。

所以我将上面的示例更改为:

   {
        path: 'auth-callback',
        component: AuthCallbackComponent,
        **canActivate: [AuthGuardService]**
      },

现在我从服务器端授权端点获取递归重定向到auth-callback并返回到服务器端授权端点。

我甚至无法在浏览器中对其进行调试,因为所有内容都快速传播到源文件......

  1. 什么是auth-callback ROUTE应该是什么样子?它必须不受保护吗?正如我所说,我只保护路线。
  2. 我需要在Scott Brady的样本中解决递归停止的问题吗?
  3. 我发现auth.guard.ts.isLoggedIn()函数被触发后,auth.aervice.ts中的用户字段为空,但我不知道为什么该调用为用户返回null。那个空用户问题就是以前没有使用auth-callback。

1 个答案:

答案 0 :(得分:0)

我从未使用过javascript客户端,因此我无法帮助您进行配置。但我想我可以帮你解决这个问题。

正如您所猜测的那样,问题是所有路线都受到保护。但是某些路径无法保护,因为用户尚未登录。与登录页面一样,auth-callback路径和访问被拒绝路径。

由于无法访问auth-callback路径,用户尚未进行身份验证,从未进行过身份验证,用户将被重定向到默认的AccessDenied页面。我相信这是/Account/AccessDenied。这也受到保护,导致再次挑战身份等等。

如果您允许匿名访问/Account/AccessDenied路径和auth-callback路径,我认为您的问题已解决。

第一个是实际登录用户,第二个是停止递归。

/Account/AccessDenied代码中,您可以确定如何回复。因为如果声明丢失,经过身份验证的用户也可以在此处结束,例如用户已通过身份验证但不是管理员。或者用户已通过身份验证,但没有对此网站的声明。