AWS Cognito๋ ?
์น ๋ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ์ํ ์๊ฒฉ ์ฆ๋ช ํ๋ซํผ์ผ๋ก ์ฌ์ฉ์ ์ธ์ฆ, ๊ถํ ๋ถ์ฌ, ์ฌ์ฉ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ถ๊ฐํ ์ ์๊ฒ ํด์ค๋ค.
ํ์ฌ ํ์์๋ OAuth2.0 access token ๋ฐ ์๊ฒฉ ์ฆ๋ช ์ ๋ํ ๊ถํ ๋ถ์ฌ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๊ณ ์๋ค.
ํ๋ถ์ ์์ ์ ํ๋ก์ ํธ๋ฅผ ํ์ ๋๋ Spring Security๋ฅผ ์ฌ์ฉํด ์ง์ JWT๋ฅผ ๋ฐ๊ธํ๊ณ ๊ด๋ฆฌํ๋ค.
AuthenticationManager
๋๋ UserDetailsService
๋ฅผ ํตํด ์ฌ์ฉ์์ ์๊ฒฉ ์ฆ๋ช
์ ํ์ธํ๊ณ ,
์ธ์ฆ ์ฑ๊ณต ์ ์๋ฒ๊ฐ JWT๋ฅผ ์์ฑํ์ฌ ํด๋ผ์ด์ธํธ์๊ฒ ๋ฐํํ๋ ๋ฐฉ์์ผ๋ก ๋ง์ด๋ค.
ํ์ง๋ง ์ค๋ฌด์์๋ AWS Cognito๋ฅผ ์ฌ์ฉํด JWT๋ฅผ ๋ฐ๊ธ๋ฐ๊ณ ๊ด๋ฆฌํ๊ณ ์๋ค.
JWT ์์ฑ ๋ฐ ๊ฒ์ฆ ๋ก์ง์ ๊ตฌํํด์ผํ๊ณ , ๋ณด์ ๊ด๋ จ ๊ตฌ์ฑ๋ ์๋์ผ๋ก ๊ด๋ฆฌํด์ผํ๋ ๊ฒ์ ๋นํด
AWS์์ ์ ๊ณตํ๋ ๋ณด์ ๊ธฐ๋ฅ์ ๊ทธ๋๋ก ํ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค !
๐ ์ฆ, ๋ณต์กํ ์ธ์ฆ ๊ณผ์ ์ ๊ฐ์ํํ๊ณ AWS์ ๋ค์ํ ์๋น์ค์ ํตํฉํ์ฌ ์ฝ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅ !
AWS Cognito๋ ์ฌ์ฉ์ ํ, ์๊ฒฉ ์ฆ๋ช ํ ์ด๋ ๊ฒ ๋ ๊ฐ์ง ์ปดํฌ๋ํธ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํ์์๋ ์ฌ์ฉ์ ํ์ ์ฌ์ฉํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฐ์ ์ฌ์ฉ์ ํ์ ๋ํด์๋ง ์ ๋ฆฌํ๊ฒ ๋ค.
OAuth (Open Authorization) ๋ ?
์์๋๊ป์ OAuth๊ฐ ๋ญ์ง ์๋๊ณ ์ฌ์ญค๋ณด์ จ์ ๋..
"์ธ์ฆํ ๋ ์ฌ์ฉํ๋ ๊ฑด๋ฐ.. ์์ ๋ก๊ทธ์ธ ๊ตฌํํ ๋ ์ ํด๋ดค์ต๋๋ค !" ๋ผ๊ณ ๋ง ๋๋ตํ์ ๋ฟ ๊ฐ๋ ์ ๋ํด ์์ ์๊ฒ ๋งํ๊ธฐ ์ด๋ ค์ ๋ค ;
์์ ๋ธ๋ก๊ทธ๊ฐ OAuth์ ๋ํด ์์ธํ๊ณ ์ดํดํ๊ธฐ ์ฝ๊ฒ ์ ๋ฆฌ๋ฅผ ํด์ฃผ์ จ๋ค.
๊ฐ๋ ์ ์ด๊ฒ์ ์ฐธ๊ณ ํ๊ณ , OAuth์ Cognito๊ฐ์ ๊ด๊ณ์ ๋ํด ์ ๋ฆฌํ๊ฒ ๋ค !
OAuth๋ ์ฌ์ฉ์ ์ธ์ฆ๊ณผ ๊ถํ ๋ถ์ฌ๋ฅผ ์ํ ๊ฐ๋ ฅํ ํ๋กํ ์ฝ์ด๋ฉฐ, Amazon Cognito๋ ์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ธ์ฆ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๋ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ค.
โณ๏ธ Cognito์์ OAuth ์ฌ์ฉ ๋ฐฉ๋ฒ
- User Pool ์ค์
- ์ฌ์ฉ์ ๋ฑ๋ก, ๋ก๊ทธ์ธ, ๋น๋ฐ๋ฒํธ ์ฌ์ค์ ๋ฑ์ ๊ด๋ฆฌ
- App Client ์์ฑ
- User Pool ๋ด์ App Client๋ฅผ ์์ฑํ์ฌ OAuth 2.0์ ์ง์ํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ ์
- ํ์ฌ ์ค๋ฌด์์ ์ฌ์ฉํ๋ ๊ฒ์ ์๋ก ๋ค๋ฉด IoT ๊ธฐ๊ธฐ์ ๊ธฐ์ ๊ณผ ์ฐจ๋ ๊ธฐ์ ๋ฑ..
- ์ด ํด๋ผ์ด์ธํธ๋ ๋ฆฌ์์ค ์๋ฒ์ ํต์ ํ ์ ์๋ clientId ๋ฐ secret์ ๊ฐ์ง
- ์ธ์ฆ ํ๋ก์ฐ
- ์ผ๋ฐ์ ์ผ๋ก Authorization Code Grant Flow๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ์ธ๊ฐ์ฝ๋๋ฅผ ๋ฐ๊ธ๋ฐ์
- ์ด๋ฅผ ์ฌ์ฉํ์ฌ access token ๋ฐ ID token ์์ฒญ
- Access token ๋ฐ ID token
- ์ฌ์ฉ์๊ฐ ์ธ์ฆ์ ์ฑ๊ณตํ๋ฉด Cognito๋ ํด๋ผ์ด์ธํธ์๊ฒ ์ก์ธ์ค ํ ํฐ๊ณผ ID ํ ํฐ์ ๋ฐ๊ธํจ
- ์ด ํ ํฐ์ ์ฌ์ฉํ์ฌ ๋ฆฌ์์ค ์๋ฒ์ ์์ฒญ์ ๋ณด๋
- API Gateway์ ํตํฉ
- Cognito๋ AWS API Gateway์ ํตํฉ๋์ด ๋ณดํธ๋ API์ ๋ํ ์ ๊ทผ ์ ์ด ๊ฐ๋ฅ
- API Gateway๋ Cognito์์ ๋ฐ๊ธ๋ ํ ํฐ์ ๊ฒ์ฆํ์ฌ ์ฌ์ฉ์ ์์ฒญ์ ์น์ธํจ
โด๏ธ ์์
- ์ฌ์ฉ์๊ฐ ๋ก๊ทธ์ธ : ์ฌ์ฉ์๊ฐ ํด๋ผ์ด์ธํธ ์ดํ๋ฆฌ์ผ์ด์ ์ "๋ก๊ทธ์ธ" ๋ฒํผ์ ํด๋ฆญ
- ์ธ๊ฐ ์์ฒญ : ํด๋ผ์ด์ธํธ๋ Cognito์ ๋ก๊ทธ์ธ ํ์ด์ง๋ก ์ฌ์ฉ์๋ฅผ redirection
- ์ธ๊ฐ ์น์ธ : ์ฌ์ฉ์๊ฐ ์๊ฒฉ ์ฆ๋ช ์ ์ ๋ ฅํ๊ณ ์น์ธํ๋ฉด Cognito๋ ์ธ๊ฐ์ฝ๋๋ฅผ ํด๋ผ์ด์ธํธ๋ก redirection
- ํ ํฐ ์์ฒญ : ํด๋ผ์ด์ธํธ๋ ์ธ๊ฐ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ Cognito๋ก๋ถํฐ access token๊ณผ ID token์ ์์ฒญํจ
- API ์ ๊ทผ : ํด๋ผ์ด์ธํธ๋ access token์ ์ฌ์ฉํ์ฌ ๋ณดํธ๋ API์ ์์ฒญ์ ๋ณด๋
์ฌ์ฉ์ ํ
์ฌ์ฉ์ ๋ฑ๋ก๊ณผ ๋ก๊ทธ์ธ ๋ฐ ๊ด๋ฆฌ ๊ธฐ๋ฅ ์ ๊ณต
- ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ณ ์ฑ ๋๋ API์ ๊ถํ์ ๋ถ์ฌํ๋ ค๋ ๊ฒฝ์ฐ ์ฌ์ฉ์ ํ ์์ฑ
- ์ฌ์ฉ์ ํ์์ ์ธ์ฆ๋ JWT์ ์ฑ, ์น ์๋ฒ ๋๋ API์ ์ง์ ๋ฐ๊ธ ๊ฐ๋ฅ
- ์ฌ์ฉ์ ์์ฑ(์ด๋ฉ์ผ, ์ ํ๋ฒํธ ๋ฑ)์ ๊ด๋ฆฌํ๊ณ ์ด๋ฅผ ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฐ๋ ๊ฐ๋ฅ
โณ๏ธ ์ ๊ณตํ๋ ๊ธฐ๋ฅ
- API ๊ถํ ๋ถ์ฌ ์๋ฒ
- ์ก์ธ์ค ํ ํฐ์ ๋ฐ๊ธํ์ฌ OAuth 2.0 ๊ถํ ๋ถ์ฌ ๋ฒ์๋ฅผ ํ์ฉํ๋ API, ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐ ๊ธฐํ ๋ฆฌ์์ค์ ๋ํ ์ฌ์ฉ์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
- OIDC IdP
- ์ฑ ์ฌ์ฉ์๋ฅผ ์ธ์ฆํ๊ธฐ ์ํ OIDC ID ํ ํฐ ๋ฐ๊ธ
- OIDC SP(Service Provider)
- OIDC ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ฌ์ฉ์ ์ ๋ณด ์ ๊ทผ์ ์ ๊ณตํ๋ ํด๋ผ์ด์ธํธ ์ดํ๋ฆฌ์ผ์ด์
๋๋ ์๋น์ค
- OIDC ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ฌ ์ธ์ฆ ๋ฐ ์ฌ์ฉ์ ์ ๋ณด ์ ๊ทผ์ ์ ๊ณตํ๋ ํด๋ผ์ด์ธํธ ์ดํ๋ฆฌ์ผ์ด์
๋๋ ์๋น์ค
๐ OIDC (OpenID Connect) ๋ ?
๐OAuth 2.0 ํ๋กํ ์ฝ ์์์ ๊ตฌ์ถ๋ ์ธ์ฆ ํ๋กํ ์ฝ๋ก, ์ฌ์ฉ์ ์ธ์ฆ์ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๊ณ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด(ํ๋กํ)๋ฅผ ์ ๊ณตํ๋ ํ์ค
- OAuth 2.0์ ์ฃผ๋ก ๊ถํ ๋ถ์ฌ์ ์ง์ค & ์ฌ์ฉ์ ๋์ ํน์ ์์์ ์ ๊ทผํ ๊ถํ ์์ฒญํ๊ณ ์ก์ธ์ค ํ ํฐ ๋ฐ๊ธ๋ฐ์
- OIDC๋ ์ธ์ฆ์ ์ค์ & ์ฌ์ฉ์๊ฐ ๋๊ตฌ์ธ์ง ํ์ธํ๊ณ ์ธ์ฆ ์ ๋ณด ์ ๋ฌ
- OIDC๋ OAuth 2.0์ ์ก์ธ์ค ํ ํฐ ์ธ์๋ ID ํ ํฐ ๊ฐ๋ ๋์
๐ ID ํ ํฐ์ ์ฌ์ฉ์๊ฐ ์ธ์ฆ๋์์์ ์ฆ๋ช ํ๋ JWT
์ธ์ฆ ์๋ ๋ฐฉ์
1๏ธโฃ์ฌ์ฉ์ ์๊ฒฉ ์ฆ๋ช ์ ๋ ฅ (app client์์)
- ์ฌ์ฉ์๊ฐ App client์์ ์์ด๋/๋น๋ฐ๋ฒํธ ๋๋ ์์ ๋ก๊ทธ์ธ์ ํตํด ์๊ฒฉ ์ฆ๋ช ์ ์ ๋ ฅ
2๏ธโฃ App client์์ cognito๋ก ์๊ฒฉ ์ฆ๋ช ์ ์ก
- App client๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๊ฒฉ ์ฆ๋ช ์ AWS Cognito๋ก ์ ๋ฌ
- Authorization Code Flow ๋๋ Resource Owner Password Flow ๊ฐ์ OAuth 2.0 ์ธ์ฆ ํ๋ก์ฐ ์ฌ์ฉ
3๏ธโฃ Cognito์ ์ฌ์ฉ์ ์ธ์ฆ
- ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์๊ฒฉ ์ฆ๋ช (์ด๋ฉ์ผ, ๋น๋ฐ๋ฒํธ ๋ฑ)์ Cognito User Pool์ ์ฌ์ฉ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋น๊ตํ์ฌ ์ธ์ฆ ์ฌ๋ถ ํ์ธ
4๏ธโฃ ํ ํฐ ๋ฐ๊ธ
- ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ๋๋ฉด Cognito๋ 3๊ฐ์ ํ ํฐ ๋ฐ๊ธ
- ID token : ์ฌ์ฉ์์ ์ ์์ ๋ณด(์ฌ์ฉ์๋ช , ์ด๋ฉ์ผ ๋ฑ)๋ฅผ ํฌํจํ๋ฉฐ ์ดํ๋ฆฌ์ผ์ด์ ์์ ์ฌ์ฉ์๋ฅผ ์๋ณํ๋ ๋ฐ ์ฌ์ฉ๋จ ๐ JWT ํ์์ผ๋ก ์ ๊ณต๋จ
- access token : ๋ณดํธ๋ ๋ฆฌ์์ค์ ๋ํ ์ก์ธ์ค ๊ถํ์ ๋ถ์ฌํ๋ ๋ฐ ์ฌ์ฉ๋จ ๐ Cognito์์ ์ ๊ณตํ๋ ์ฌ์ฉ์ ํ๋กํ API์ ์ ๊ทผํ ๋ ํ์
- refresh token : access token์ด ๋ง๋ฃ๋์์ ๋ ์๋กญ๊ฒ ๋ฐ๊ธ๋ฐ๊ธฐ ์ํด ์ฌ์ฉ๋จ
5๏ธโฃ ์ดํ๋ฆฌ์ผ์ด์ ์ด ํ ํฐ์ ์ด์ฉํด ์ฌ์ฉ์ ์ธ์ ๊ด๋ฆฌ
- ๋ฐ๊ธ๋ ID ํ ํฐ์ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์ธ์ฆ ์ํ ์ ์งํ๊ณ ํ์์ ๋ฐ๋ผ access token์ ์ฌ์ฉํด ๋ณดํธ๋ API์ ์ ๊ทผ
- refresh ํ ํฐ์ ์ฌ์ฉํด ์ฌ์ธ์ฆ
Cognito์ ๊ด๋ จ๋ ์ฌ๋ฌ ์ธํฐํ์ด์ค์ ํด๋์ค
โณ๏ธ CognitoIdentityProviderAsyncClient
- Amazon Cognito Identity Provider (Cognito) ์๋น์ค์ ๋น๋๊ธฐ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋๋ก ์ ๊ณตํ๋ ํด๋ผ์ด์ธํธ ํด๋์ค
- Cognito User Pool๊ณผ ๊ด๋ จ๋ ์์ ์ํํ ๋ ์ฌ์ฉ๋จ
- ์ฌ์ฉ์ ๋ฑ๋ก, ๋ก๊ทธ์ธ, ์ธ์ฆ ํ ํฐ ๊ฒ์ฆ ๋ฑ์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌ
โด๏ธ adminInitiateAuth
- ๊ด๋ฆฌ์๊ฐ ์ฌ์ฉ์ ์ธ์ฆ ์์ (๋ก๊ทธ์ธ)
import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminInitiateAuthRequest;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminInitiateAuthResponse;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AuthFlowType;
import software.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderException;
import java.util.HashMap;
import java.util.Map;
public class CognitoAuthExample {
public static void main(String[] args) {
String userPoolId = "YOUR_USER_POOL_ID"; // ์ฌ์ฉ์ ํ ID
String clientId = "YOUR_APP_CLIENT_ID"; // ์ฑ ํด๋ผ์ด์ธํธ ID
String username = "YOUR_USERNAME"; // ์ฌ์ฉ์ ์ด๋ฆ
String password = "YOUR_PASSWORD"; // ์ฌ์ฉ์ ๋น๋ฐ๋ฒํธ
CognitoIdentityProviderClient cognitoClient = CognitoIdentityProviderClient.builder().build();
try {
// ์ธ์ฆ ํ๋ผ๋ฏธํฐ ์ค์
Map<String, String> authParams = new HashMap<>();
authParams.put("USERNAME", username);
authParams.put("PASSWORD", password);
// ์์ฒญ ์์ฑ
AdminInitiateAuthRequest authRequest = AdminInitiateAuthRequest.builder()
.userPoolId(userPoolId)
.clientId(clientId)
.authFlow(AuthFlowType.ADMIN_NO_SRP_AUTH) // AUTH_FLOW ํ์
์ง์
.authParameters(authParams)
.build();
// ์ธ์ฆ ์์ฒญ ์คํ
AdminInitiateAuthResponse authResponse = cognitoClient.adminInitiateAuth(authRequest);
// ๊ฒฐ๊ณผ ์ฒ๋ฆฌ
System.out.println("Authentication successful!");
System.out.println("ID Token: " + authResponse.authenticationResult().idToken());
System.out.println("Access Token: " + authResponse.authenticationResult().accessToken());
System.out.println("Refresh Token: " + authResponse.authenticationResult().refreshToken());
} catch (CognitoIdentityProviderException
โด๏ธ adminUserGlobalSignOut
- Amazon Cognito์ ๊ด๋ฆฌ์๊ฐ ํน์ ์ฌ์ฉ์์ ๋ชจ๋ ๊ธฐ๊ธฐ์์ ๋ก๊ทธ์์ ์ฒ๋ฆฌํ ์ ์๋๋ก ์ง์ํ๋ ๋ฉ์๋
import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminUserGlobalSignOutRequest;
import software.amazon.awssdk.services.cognitoidentityprovider.model.AdminUserGlobalSignOutResponse;
CognitoIdentityProviderClient cognitoClient = CognitoIdentityProviderClient.builder().build();
AdminUserGlobalSignOutRequest request = AdminUserGlobalSignOutRequest.builder()
.userPoolId("USER_POOL_ID") // Cognito User Pool ID
.username("USERNAME") // ๋์ ์ฌ์ฉ์ ์ด๋ฆ
.build();
AdminUserGlobalSignOutResponse response = cognitoClient.adminUserGlobalSignOut(request);
System.out.println("Global sign-out successful: " + response.toString());
โด๏ธ AdminInitiateAuthResponse
- adminInitiateAuth ๋ฉ์๋ ํธ์ถ ํ ๋ฐํ๋๋ ์๋ต ๊ฐ์ฒด๋ก ์ฌ์ฉ์ ์ธ์ฆ ์์ฒญ์ ๊ฒฐ๊ณผ ํฌํจ
- ์ฌ์ฉ์๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์ธ์ฆ๋์์ ๋ ๋ฐํ๋๋ ์ธ์ฆ ํ ํฐ๊ณผ ๊ด๋ จ ์ ๋ณด ํฌํจ๋จ
AdminInitiateAuthResponse authResponse = cognitoClient.adminInitiateAuth(authRequest);
if (authResponse.authenticationResult() != null) {
// ์ธ์ฆ ์ฑ๊ณต ์ ํ ํฐ ์ ๋ณด
System.out.println("ID Token: " + authResponse.authenticationResult().idToken());
System.out.println("Access Token: " + authResponse.authenticationResult().accessToken());
System.out.println("Refresh Token: " + authResponse.authenticationResult().refreshToken());
} else if (authResponse.challengeName() != null) {
// ์ถ๊ฐ ์ธ์ฆ ๋จ๊ณ ํ์ ์
System.out.println("Challenge Name: " + authResponse.challengeName());
System.out.println("Challenge Parameters: " + authResponse.challengeParameters());
}
โด๏ธ respondToAuthChallenge
- Amazon Cognito์์ ์ถ๊ฐ ์ธ์ฆ ๋จ๊ณ (ex.MFA) ๋ฑ์ ์ฑ๋ฆฐ์ง ๋ฑ์ ๋ํ ์๋ต์ ์ ๊ณตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ฉ์๋
import software.amazon.awssdk.services.cognitoidentityprovider.CognitoIdentityProviderClient;
import software.amazon.awssdk.services.cognitoidentityprovider.model.RespondToAuthChallengeRequest;
import software.amazon.awssdk.services.cognitoidentityprovider.model.RespondToAuthChallengeResponse;
import software.amazon.awssdk.services.cognitoidentityprovider.model.CognitoIdentityProviderException;
import java.util.HashMap;
import java.util.Map;
public class CognitoChallengeResponseExample {
public static void main(String[] args) {
String clientId = "YOUR_APP_CLIENT_ID"; // ์ฑ ํด๋ผ์ด์ธํธ ID
String session = "YOUR_SESSION_TOKEN"; // ์ด๊ธฐ ์ธ์ฆ์ ์ธ์
ํ ํฐ
String username = "YOUR_USERNAME"; // ์ฌ์ฉ์ ์ด๋ฆ
String mfaCode = "YOUR_MFA_CODE"; // SMS ๋๋ ์ํํธ์จ์ด MFA ์ฝ๋
CognitoIdentityProviderClient cognitoClient = CognitoIdentityProviderClient.builder().build();
try {
// ์ฑ๋ฆฐ์ง ์๋ต ๋งคํ
Map<String, String> challengeResponses = new HashMap<>();
challengeResponses.put("USERNAME", username);
challengeResponses.put("SMS_MFA_CODE", mfaCode); // MFA ์ฝ๋ ์ถ๊ฐ
// ์์ฒญ ์์ฑ
RespondToAuthChallengeRequest challengeRequest = RespondToAuthChallengeRequest.builder()
.clientId(clientId)
.challengeName("SMS_MFA") // ์ฑ๋ฆฐ์ง ์ด๋ฆ
.session(session) // ์ธ์
ํ ํฐ
.challengeResponses(challengeResponses)
.build();
// ์๋ต ์คํ
RespondToAuthChallengeResponse challengeResponse = cognitoClient.respondToAuthChallenge(challengeRequest);
System.out.println("Challenge response successful!");
System.out.println("Access Token: " + challengeResponse.authenticationResult().accessToken());
} catch (CognitoIdentityProviderException e) {
System.err.println("Challenge response failed: " + e.awsErrorDetails().errorMessage());
} finally {
cognitoClient.close();
}
}
}
์ฐธ๊ณ ์๋ฃ
https://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/what-is-amazon-cognito.html
'AWS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[AWS] AWS SDK๋ฅผ ํ์ฉํด AWS IoT ๋๋ฐ์ด์ค ๋ฑ๋กํ๊ธฐ (0) | 2024.11.26 |
---|---|
[AWS] AWS IoT Core ์ด๊ฒ์ ๊ฒ (1) | 2024.11.21 |
[AWS] AWS CloudFormation (0) | 2024.10.15 |
[AWS] AWS IoT Core๋ ? (0) | 2024.09.27 |
[AWS] SchedulerAsyncClient (0) | 2024.07.17 |