如何在Spring网关后面配置AngularApp并检查身份验证?



我试图解决的问题是很常见的:(至少我是这么认为的)

到目前为止,我已经实现了两个spring启动应用程序,网关服务和后端服务,并运行keycloak作为OIDC-provider。网关根据authorization_code进行身份验证并将用户路由到后端端点。后端是资源服务器,正在检查从网关发送的JWT中的角色。
User<br>
<space> |<br>
Gateway *(authentication against keycloak)*<br>
/ - \<br>
UI  - Protected Resource/API Server *(Check the send JWT for roles)*

一切正常!

现在我想添加一个Angular前端应用。

此应用程序还应该从网关接收JWT并检查用户是否通过身份验证。

我现在的问题是,我找不到一个好的例子来配置Angular应用程序,以便应用程序中的路由是安全的,并且我可以将令牌转发到后端服务。

有人知道怎么做吗?

(链接就可以了)

您所描述的是作为BFF(后端为前端)使用的网关。这意味着网关是唯一的OAuth2客户端。这个设置精确地用于对浏览器客户机隐藏访问令牌。

在这个配置中,Angular应用根本不是OAuth2。它不会从授权服务器检索令牌(只有网关会),并且它的请求是通过网关上的会话而不是承载访问令牌进行授权的。

可以在API上公开user-info端点。如果您需要的所有信息都包含在网关发送给Spring API的访问令牌中,那么实现这一点很简单:资源服务器可以简单地返回来自Jwt实例的声明(JwtAuthenticationToken中的主体,它是资源服务器中成功授权的默认身份验证实现):

@GetMapping("/userinfo")
@ResponseBody
@PreAuthorise("isAuthenticated()") 
public Map<String, Object> getUserinfo(JwtAuthenticationToken auth) {
return auth.getClaims();
}

在那里完成教程。

另一个选项,因为Keycloak是OpenID兼容的,将在API端点上公开id令牌(或直接从网关,它将是一个OpenID客户端,并具有当前用户的id令牌),然后在Angular应用程序中解码这个JWT,但我没有一个简单的解决方案。

相关内容

最新更新