SpringCloud Dataflow Keycloak Angular 8 集成 - 401 未经授权有时?

问题描述

我正在开发一个项目,后端使用 SpringBoot 框架,前端使用 Angular8。前端和后端之间的连接是通过 Nginx 代理服务器进行的。我想与 Keycloak 集成,我使用了 keycloak-angular v.6.1.0 库(https://www.npmjs.com/package/keycloak-angular)和 keycloak-js v.9.0.3(https://www.npmjs.com/package/keycloak-js),乍一看似乎工作顺利.具体来说,登录页面出现,我提供凭据,登录成功,keycloak 发回令牌,该令牌用作发送到后端的请求的授权承载令牌。

我面临的问题是这些请求通常会成功,但有时却不会,会给出 401 未经授权的代码。当我监控这些失败的请求时,我用 jwt(https://jwt.io/) 检查了不记名令牌的有效性,它总是有效的,然后我用 curl 仔细检查,请求成功,我得到了预期的结果。

app.module.ts

export function initializer(keycloak: KeycloakService) {
  return async () => {
    const authenticated = await keycloak.init({
      config: environment.keycloakConfig
    });

    if (!authenticated) {
      console.log("Not authenticated")

      await keycloak.login({ scope: environment.scope });

      return authService.loadSecurityInfo(true)
        .pipe(
          map(securityInfo => {
            ....
          })
        ).toPromise();
    } else {
      console.log("Authenticated!")

      return authService.loadSecurityInfo(true)
        .pipe(
          map(securityInfo => {
            ...
          })
        ).toPromise();
    }
  };
}

我提供了带有 keycloak 初始值设定项和 keycloak 登录代码。 loadSecurityInfo 函数只是在后端的相应端点中执行 get 请求。

LoadSecurityInfo

return this.http
  .get<any>(AuthService.URL.Security_INFO,{ headers: HttpUtils.getDefaultHttpHeaders() })
  .pipe(
    map(body => {
      ...
    })
  );

我想知道是否有人面临相同或类似的问题,并且可以让我了解可能出现的问题。 提前致谢! :D

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...