Angular+OAuth+ASP.NET Core 6 API:未登录无法访问非安全页面
解决Angular Auth0拦截器导致未登录用户无法访问非安全模块的问题
问题核心
当前问题的根源是Auth0的AuthHttpInterceptor默认会对allowedList中的所有请求强制要求用户登录:未登录状态下,拦截器尝试为请求附加Bearer令牌失败,就会抛出"Login is required"错误并阻止请求发送——哪怕对应的后端接口允许匿名访问。
你的配置中,allowedList设置为${environment.apiUrl}*,意味着所有API请求都会被拦截器处理,且默认allowAnonymous为false,所以未登录时调用无需授权的GET All接口也会触发登录要求。
解决方案
修改AuthModule的httpInterceptor配置,为无需授权的接口单独设置allowAnonymous: true,且该规则要放在通配符规则之前(拦截器按顺序匹配规则)。
修改后的AuthModule配置
AuthModule.forRoot({ domain: 'domain', clientId: 'clientId', authorizationParams: { redirect_uri: window.location.origin, }, httpInterceptor: { allowedList: [ // 针对无需授权的GET All接口,允许匿名访问 { uri: `${environment.apiUrl}/recipes`, // 替换为你实际的GET All接口路径 httpMethod: 'GET', allowAnonymous: true }, // 其余需要授权的API请求,拦截器会自动附加Bearer令牌 `${environment.apiUrl}*` ], }, }),
关键说明
allowAnonymous: true:告诉拦截器该请求不需要用户登录,未登录状态下也能正常发送,且不会附加Authorization头- 规则顺序:具体的匿名接口规则必须放在通配符规则前面,避免被通配符规则覆盖
- 后端配合:确保ASP.NET Core的
GET All接口已添加[AllowAnonymous]特性,允许匿名访问
验证步骤
- 未登录状态下访问
/recipes路径 - 查看浏览器网络请求,确认
GET All接口正常发送,且未携带Authorization头 - 确认页面正常加载数据,不再弹出"Login is required"错误
内容的提问来源于stack exchange,提问作者Koen Rombout
相关产品推荐
相关产品推荐

