头图

在阅读本文之前,请确保您已经读过了这篇文章:[给 SAP BTP 平台上的 Java 应用增添用户登录和认证机制]()

使用 App Router 进行身份验证后,您的 java 后端服务仍然在 Web 中完全可见且不受保护。 因此,您还需要保护您的 Java 微服务,以便它们仅接受当前用户具有有效 JWT 的请求。 此外,您将以处理授权的方式设置微服务,即理解我们之前使用 xs-security.json 文件配置的 JWT 的 OAuth 范围。

在下文中,您将使用 SAP CP Spring XSUAA 安全库的安全功能来保护微服务。

在您的应用程序 pom.xml 中,确保存在以下依赖项:

<dependency>
    <groupId>com.sap.cloud.security.xsuaa</groupId>
    <artifactId>xsuaa-spring-boot-starter</artifactId>
</dependency>

这为 Spring 提供了 XSUAA 库的必要功能。在设置 SecurityConfiguration 时利用它们:

@Configuration
@EnableWebSecurity(debug = true) // TODO "debug" may include sensitive information. Do not use in a production system!
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, jsr250Enabled = true)
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    XsuaaServiceConfiguration xsuaaServiceConfiguration;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .sessionManagement()
                .sessionCreationPolicy(SessionCreationPolicy.STATELESS) // session is created by approuter
                .and()
                .authorizeRequests()
                .antMatchers("/*").authenticated()
                .antMatchers("/*").hasAuthority("Display")
                .anyRequest().denyAll()
                .and()
                .oauth2ResourceServer()
                .jwt()
                .jwtAuthenticationConverter(getJwtAuthenticationConverter());
    }

    /**
     * Customizes how GrantedAuthority are derived from a Jwt
     */
    Converter<Jwt, AbstractAuthenticationToken> getJwtAuthenticationConverter() {
        return new TokenAuthenticationConverter(xsuaaServiceConfiguration).setLocalScopeAsAuthorities(true);
    }
}

以上将需要通过 JWT 对您服务的所有端点进行身份验证。此外,所有 JWT 都需要包含显示范围。

如果您现在调用应用程序的 /businesspartners 端点,您将看到 401 Unauthorized 状态代码,因为您未获得 App Router 的授权。 另一方面,通过您的应用路由器调用 /businesspartners 端点会给您一个 403 Forbidden 状态代码,这意味着您没有必要的授权来查看此页面。 这是意料之中的,因为您使用上面的注释保护了端点,而没有将请求的角色 Display 分配给您的用户。

要重新获得对受保护端点的访问权限,您需要分配 Display OAuth 范围。这是使用 SAP BTP Cockpit 完成的。

首先,转到您在 Cloud Foundry 上的帐户,然后在安全模块下找到角色集合菜单。

其次,创建一个新的角色集合,您可以为其指定任意名称。 例如,Business Partner Manager.

然后,选择角色集合业务合作伙伴经理,选择编辑,然后添加一个新角色。从菜单中,选择您的应用程序以及相应的角色模板和角色。通过添加新创建的角色并保存业务合作伙伴经理角色集合来完成该过程。

之后,必须将用户分配给新创建的 Business Partner Manager 才能接收显示范围。 为此,请从安全菜单中选择信任配置,然后从列表中选择默认身份提供者。

在打开的对话框中,在用户字段中输入您的用户 ID 作为电子邮件,然后单击显示分配,然后单击添加分配。

从菜单中选择 Business Partner Manager 以将其分配给您的用户。

之后,您将显示 OAuth 范围分配给您的用户,这允许您再次访问受保护的端点。

重新部署后,将不再可能直接访问您的后端服务并导致以下消息:

但仍然可以通过 app router 访问:

更多Jerry的原创文章,尽在:"汪子熙":


注销
1k 声望1.6k 粉丝

invalid