我已经在我的spring启动应用程序中集成了keycloak适配器,如文档中所述 . 工作流程正在运行 . 最初,我在属性中使用会话令牌存储,但我想摆脱它并且是无状态的 . 所以,我将选项更改为cookie令牌存储 .
我可以看到我的Spring Boot应用程序确实在KEYCLOAK_ADAPTER_STATE cookie(screenshot)中发送了keycloak访问令牌 . 正如所料,它被标记为HTTP cookie .
但是,即使我在查询中打开withCredentials选项,当我查询我的后端时,进一步的角度http请求也不会发送该cookie .
let options : RequestOptions = new RequestOptions();
options.withCredentials = true;
this.http.get('myservice', options)
如何在无状态http调用中使用该令牌?
非常感谢 !
2 回答
我发现了问题 . 到达我的页面的初始请求URL是“/ app / mymodule”,因此keycloak HTTP令牌绑定到/ app路径;但我查询后端的JS http请求是“/ services / myservice”,因此浏览器不会发送cookie,因为根路径不匹配 . 我在/ app / services下移动了我的服务,现在令牌按预期发送,并经过正确验证:) .
使用Interceptors:
构造函数(private auth:AuthService){}
拦截(req:HttpRequest <any>,next:HttpHandler){
//从服务中获取身份验证令牌 .
const authToken = this.auth.getAuthorizationToken();
//克隆请求并替换原始标头
//克隆 Headers ,使用授权进行更新 .
const authReq = req.clone({
headers:req.headers.set('Authorization',authToken)
});
//将带有 Headers 的克隆请求发送到下一个处理程序 .
return next.handle(authReq);
}
}
...