要将Angular、Spring Boot和Cognito集成在一起,您可以按照以下步骤进行操作:
设置Cognito用户池: 首先,您需要在Amazon Cognito中创建一个用户池。您可以使用AWS管理控制台或AWS CLI来完成此操作。在用户池中,您需要设置用户注册和身份验证选项,并生成一个应用程序客户端ID和客户端密钥,以便后续在Angular和Spring Boot中使用。
在Angular中实现用户认证: 在Angular应用程序中,您可以使用Angular Cognito库(例如ngx-cognito)来实现用户认证。首先,您需要在Angular项目中安装ngx-cognito库。然后,您可以在您的登录组件中使用相应的服务来处理用户注册、登录和注销功能。以下是一个简单的示例:
import { Component } from '@angular/core';
import { CognitoAuthService } from 'ngx-cognito';
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.css']
})
export class LoginComponent {
constructor(private authService: CognitoAuthService) {}
login(username: string, password: string) {
this.authService.login(username, password)
.subscribe(
response => console.log('Logged in successfully'),
error => console.error('Login failed', error)
);
}
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/api/**").authenticated()
.and()
.oauth2Login()
.userInfoEndpoint()
.oidcUserService(oidcUserService());
}
private OAuth2UserService oidcUserService() {
CognitoOAuth2UserService userService = new CognitoOAuth2UserService();
userService.setRealm("YOUR_USER_POOL_ID");
userService.setIssuerUri("https://cognito-idp.YOUR_REGION.amazonaws.com/YOUR_USER_POOL_ID");
return userService;
}
}
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello() {
return "Hello, world!";
}
@GetMapping("/secure")
@PreAuthorize("hasAuthority('SCOPE_openid')")
public String secure() {
return "Secure endpoint";
}
}
在上面的示例中,/api/hello
端点是公开的,任何人都可以访问。但是,/api/secure
端点需要用户具有SCOPE_openid
权限才能访问。
这是一个基本的示例,您可以根据自己的需求进行调整和扩展。希望这可以帮助您开始使用Angular、Spring Boot和Cognito集成。