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

omtl5h9j  于 2023-01-17  发布在  Spring
关注(0)|答案(1)|浏览(161)

我试图解决的问题非常普遍:(至少我这么认为)
到目前为止,我已经实现了两个Spring Boot 应用程序,网关服务和后端服务,并将keycloak作为OIDC提供者运行。因此,网关根据“authorization_code”进行身份验证,并将用户路由到后端端点。后端是资源服务器,并检查来自网关的发送JWT的角色。
用户
|
网关 (针对keycloak的身份验证)
/ -
UI -受保护的资源/API服务器 (检查发送JWT中的角色)
一切正常!
现在我想添加一个Angular 前端应用程序。
这些应用程序还应该从网关接收JWT,并检查用户是否经过身份验证。
我现在的问题是,我找不到一个很好的例子,如何配置角应用程序,使应用程序中的路由是安全的,我可以转发令牌到后端服务。
有人知道怎么做吗?
(Link就可以了)

nafvub8i

nafvub8i1#

您所描述的是用作BFF(前端的后端)的网关。这意味着网关是唯一的OAuth2客户端。此设置正好用于对浏览器客户端隐藏访问令牌。
在此配置中,Angular应用程序根本不是OAuth2。它不会从授权服务器检索令牌(只有网关会),并且它的请求是通过网关上的会话授权的,而不是承载访问令牌。
您可以在API上公开一个用户信息端点,如果您需要的所有信息都包含在网关发送给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,但我没有想到一个简单的解决方案。

相关问题