密钥斗篷的角度令牌拦截器不起作用

时间:2020-01-04 15:36:13

标签: angular spring-boot keycloak

我有一个litle角度应用程序和一个区域设置弹簧启动api。 授权由密钥斗篷处理。

当我用Postman测试spring api时,它工作正常。 在邮递员中,授权类型为“ Baerer令牌”。

当我使用Angular应用进行测试时,出现错误401。

我的Keycloak初始化代码:

import { Injectable } from '@angular/core';

declare var Keycloak: any;

@Injectable({
  providedIn: 'root'
})
export class KeycloakService {
  constructor() { }
  static keycloakAuth: any;
  /**
   * Logout the current user
   */
  static logout() {
    console.log( '*** LOGOUT' );
    KeycloakService.keycloakAuth.logout( { redirectUri: KeycloakService.keycloakAuth.logoutUrl } );
    KeycloakService.keycloakAuth.loggedIn = false;
    KeycloakService.keycloakAuth = null;
  }
  static loadProfile(): Promise<any> {
    return new Promise<any>((resolve, reject) => {
      if (KeycloakService.keycloakAuth.token) {
        KeycloakService.keycloakAuth
          .loadUserProfile()
          .success((data: any) => {
            resolve(data as any);
          })
          .error(() => {
            reject('Failed to load profile');
          });
      } else {
        reject('Not loggen in');
      }
    });
  }
  static getToken(): string {
    console.log('getToken');
    return KeycloakService.keycloakAuth.token;
  }
  init(): Promise<any> {
  return new Promise((resolve, reject) => {
    KeycloakService.keycloakAuth = new Keycloak('assets/keycloak.json');
    KeycloakService.keycloakAuth.init({
      onLoad: 'login-required',
      enableBearerInterceptor: true,
    })
      .success(() => {
        resolve();
      })
      .error(() => {
        reject();
      });
    });
  }

}

我的keycloak.json:

{
  "realm": "corres",
  "auth-server-url": "http://192.168.178.166:8083/auth",
  "ssl-required": "none",
  "resource": "angular-app",
  "public-client": true,
  "confidential-port": 0
}

我的拦截器

import { KeycloakService } from './keycloak.service';
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpErrorResponse } from '@angular/common/http';
import {tap} from 'rxjs/operators';

@Injectable()
export class AuthHeaderInterceptor implements HttpInterceptor {
    constructor() {}
    intercept(request: HttpRequest<any>, next: HttpHandler) {
        // console.log('der interceptor: hier kommt es vorbei');
        console.log(request);
        const authToken = KeycloakService.getToken();
        const authRequest = request.clone({
            setHeaders: {
                Authorization: 'Bearer ' + authToken
            },
            withCredentials: true
        });
        console.log(authRequest);
        // return next.handle(authRequest);
        return next.handle(request).pipe( tap(() => {},
        (err: any) => {
            console.log(err);
        }));
    }

}

有人可以帮助我吗?

0 个答案:

没有答案