我有一个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);
}));
}
}
有人可以帮助我吗?