当前位置: 首页 > 后端技术 > Java

如何为运行在SAPBTP上的Java微服务添加访问控制功能

时间:2023-04-01 16:12:14 Java

在阅读本文之前,请确保您已经阅读了这篇文章:【为SAPBTP平台上的Java应用添加用户登录和认证机制】()AfterauthenticatedwithAppRouter,您的Java后端服务在Web中仍然完全可见且不受保护。因此,您还需要保护您的Java微服务,以便它们只接受当前用户具有有效JWT的请求。此外,您将通过了解我们之前使用xs-security.json文件配置的JWT的OAuth范围,以处理授权的方式设置您的微服务。在下文中,您将使用SAPCPSpringXSUAA安全库的安全功能来保护您的微服务。在您的应用程序pom.xml中,确保存在以下依赖项:com.sap.cloud.security.xsuaaxsuaa-spring-boot-starter/dependency>这为Spring提供了XSUAA库的必要功能。在设置SecurityConfiguration时使用它们:@Configuration@EnableWebSecurity(debug=true)//TODO“调试”可能包含敏感信息。不要在生产系统中使用!@EnableGlobalMethodSecurity(prePostEnabled=true,securedEnabled=true,jsr250Enabled=true)publicclassSecurityConfigurationextendsWebSecurityConfigurerAdapter{@AutowiredXsuaaServiceConfigurationxsuaaServiceConfiguration;@Overrideprotectedvoidconfigure(HttpSecurityhttp)throwsException{http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)//session由approuter创建.and().authorizeRequests().antMatchers("/*").authenticated().antMatchers("/*").hasAuthority("显示").anyRequest().denyAll().and().oauth2ResourceServer().jwt().jwtAuthenticationCon转换器(getJwtAuthenticationConverter());}/***自定义如何从Jwt派生GrantedAuthority*/ConvertergetJwtAuthenticationConverter(){returnnewTokenAuthenticationConverter(xsuaaServiceConfiguration).setLocalScopeAsAuthorities)需要通过}(JWT验证服务的所有端点此外,所有JWT需要包含显示范围。如果您现在调用应用程序的/businesspartners端点,您将看到401未授权状态代码,因为您未获得AppRouter授权。另一方面,通过应用程序路由器调用/businesspartners端点将提供您是403禁止状态代码,这意味着您没有查看此页面的必要授权。这是预期的,因为您使用上面的注释保护了端点,而没有将请求的角色Display分配给您的用户。重新获得对受保护端点的访问权限,您需要分配DisplayOAuth范围。这是使用SAPBTPCockpit完成的。首先,转到您在CloudFoundry上的帐户,找到安全模块下的角色集合菜单。其次,创建一个新的角色集合,您可以随意命名。例如,业务合作伙伴经理。然后,选择角色集合BusinessPartnerManager,选择Edit,然后添加一个新角色。从菜单中选择您的应用程序以及相应的角色模板和角色。通过添加新创建的角色并保存业务合作伙伴经理角色集合来完成该过程。之后,必须将用户分配给新创建的BusinessPartnerManager才能接收显示范围。为此,请从“安全”菜单中选择“信任配置”,然后从列表中选择“默认身份提供者”。在打开的对话框中,在用户字段中输入您的用户ID作为电子邮件,然后单击显示分配,然后单击添加分配。从菜单中选择BusinessPartnerManager以将其分配给您的用户。之后,您将显示分配给您的用户的OAuth范围,这允许您再次访问受保护的端点。重新部署后,将无法再直接访问您的后端服务,并导致以下消息:但仍可通过应用程序路由器访问:更多Jerry的原创文章:“WangZixi”: