这与keycloak客户端有关。我的前端连接到公共客户端,后端连接到机密客户端。我可以登录并获取代码,因为我通过启用“启用标准流”来使用response_type = code。此代码重定向并返回我Idtoken,refreshtoken和令牌。现在,我需要与保密的后端进行通信,我想使用从前端客户端收到的一些值来对用户进行身份验证。
我怎样才能做到这一点?
这是我的前端和后端配置
前端
{
"realm": "xyz",
"auth-server-url": "http://localhost:8333/auth/",
"ssl-required": "external",
"resource": "frontend-app",
"public-client": true,
"confidential-port": 0,
"enable-cors": true
}
后端
keycloak.auth-server-url=http://localhost:8333/auth
keycloak.realm=xyz
keycloak.resource=backend-app
keycloak.principal-attribute=preferred_username
keycloak.bearer-only=true
keycloak.credentials.secret=xxx-xxx-xxx
这可能对某人有帮助。我的后端服务是带有弹簧安全性keycloakAuthenticationProvider的springboot项目,它对从前端公共客户端收到的令牌进行身份验证。
前端通话
axios({
method: 'GET',
url: '/api/authenticate',
headers:{'Authorization': 'Bearer '+keycloak.token+''}
}).then((r) => {
console.log("response",r)
})
致电后端
@GetMapping("/api/authenticate")
public ResponseEntity<SecureUserDto> authenticate() {
String username = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString();
User user = userRepository.findWithPrivilegesByUsername(username);
return ResponseEntity.ok();
}
但是我仍然无法通过keycloak服务器提供的../token端点在邮递员上正确处理它。无论如何我的工作都完成了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句