我正在使用带有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并返回到服务器端授权端点。
我甚至无法在浏览器中对其进行调试,因为所有内容都快速传播到源文件......
我发现auth.guard.ts.isLoggedIn()函数被触发后,auth.aervice.ts中的用户字段为空,但我不知道为什么该调用为用户返回null。那个空用户问题就是以前没有使用auth-callback。
答案 0 :(得分:0)
我从未使用过javascript客户端,因此我无法帮助您进行配置。但我想我可以帮你解决这个问题。
正如您所猜测的那样,问题是所有路线都受到保护。但是某些路径无法保护,因为用户尚未登录。与登录页面一样,auth-callback
路径和访问被拒绝路径。
由于无法访问auth-callback
路径,用户尚未进行身份验证,从未进行过身份验证,用户将被重定向到默认的AccessDenied页面。我相信这是/Account/AccessDenied
。这也受到保护,导致再次挑战身份等等。
如果您允许匿名访问/Account/AccessDenied
路径和auth-callback
路径,我认为您的问题已解决。
第一个是实际登录用户,第二个是停止递归。
在/Account/AccessDenied
代码中,您可以确定如何回复。因为如果声明丢失,经过身份验证的用户也可以在此处结束,例如用户已通过身份验证但不是管理员。或者用户已通过身份验证,但没有对此网站的声明。