안드로이드 Amplify v2(amplify-android version 2) Auth // SESSION_EXPIRED 이벤트 전달받는 방법

0

안녕하세요. 저는 안드로이드 Amplify 라이브러리를 aws-sdk-android -> amplify-android version 2 로 마이그레이션을 진행하고 있습니다.

1.현재 Auth.Hub 를 통해서 AuthChannelEventName.SESSION_EXPIRED 이벤트를 수신했을 때 로그아웃 후 로그인을 유도하도록 로직이 짜여져 있습니다. refreshToken이 만료된 시점에 Amplify.Auth.fetchAuthSession을 호출하면 Auth.Hub에서 SESSION_EXPIRED 이벤트를 수신받나요? 아니라면 어떻게 refreshToken 만료되었을 때 어떤 동작을 통해서 Auth.Hub에서 AuthChannelEventName.SESSION_EXPIRED 이벤트를 수신받을 수 있나요?

  1. session을 refresh 한다는게 어떤 의미인가요? session을 refresh한다는게 access 토큰이 만료되었다면 refersh 토큰을 통해 access 토큰을 발급하고, refresh토큰이 만료되었을 때, Auth.Hub에 AuthChannelEventName.SESSION_EXPIRED 이벤트를 받을 수 있는건가요?
KKH
질문됨 6달 전252회 조회
1개 답변
5
수락된 답변

안녕하세요 KKH 님,
amplify-android version 2 라이브러리에서 SESSION_EXPIRED 에 대한 질문을 주셨습니다.


Q1. SESSION_EXPIRED 이벤트 전달받는 방법.

Q1-1) refeshToken이 만료된 시점에 Amplify.Auth.fetchAuthSession을 호출하면 Auth.Hub에서 SESSION_EXPIRED 이벤트를 수신받나요?

A1-1)
네 맞습니다.

Amplify.Auth.fetchAuthSession 에서 내부적으로 호출되는 _fetchAuthSession 에서 authentication session 로직을 다루고, authStateMachine 상태 머신을 사용하여, 콜백의 성공과 에러를 호출합니다.

_fetchAuthSession 에서 SessionExpiredException 이 발생한 경우 Auth.Hub에 SESSION_EXPIRED 이벤트를 전송하게 됩니다.

자세한 사항은 다음 문서를 참고하세요.

.

Q1-2) 어떻게 refreshToken 만료되었을 때 어떤 동작을 통해서 Auth.Hub에서 AuthChannelEventName.SESSION_EXPIRED 이벤트를 수신받을 수 있나요?

A1-2)
위와 같은 이벤트 처리를 위해서, Amplify Hub 의 subscribe 함수를 사용하여 이벤트를 수신받을 수 있습니다.

자세한 사항은 다음 문서를 참고하세요.


Q2. Session Refresh

Q2-1) Session Refresh 가 어떤 의미인가요?

A2-1)
Amazon Cognito 에서 Session 을 Refresh 한다는 것은 refresh token 으로 만료된 ID token 과 access token 을 새로 발급 받는 것을 말합니다.

.

Q2-2) access 토큰이 만료되었다면 refersh 토큰을 통해 access 토큰을 발급하고, refresh토큰이 만료되었을 때, Auth.Hub에 AuthChannelEventName.SESSION_EXPIRED 이벤트를 받을 수 있는건가요?

A2-2)

네 맞습니다.

Amplify for Android 에서는 유효한 refresh token 이 존재할 때, 만료된 사용자의 ID token 과 access token 을 자동으로 refresh 합니다. refresh token 만료되면, 자동으로 refresh 하는 과정에서 SessionExpiredException 이 발생하며 Hub 에 AuthChannelEventName.SESSION_EXPIRED 이벤트가 전송됩니다.

하지만 Amplify for Android 에서 Auth.signIn API 가 아닌 federateToIdentityPool API 를 사용하는 경우라면, 수동으로 token refresh logic 를 처리하고 federateToIdentityPool API 에 새로운 token 을 제공해야 합니다.


답변이 도움이 되었기를 바라며, 추가로 궁금하신 내용이 있을 시 편하게 댓글 남겨주세요 :)

profile picture
Ayeon_K
답변함 5달 전
  • 자세한 답변 감사드립니다! 문서에서 정확하기 이해하기 어려운 부분을 정확하게 이해할 수 있었습니다. 감사합니다.

로그인하지 않았습니다. 로그인해야 답변을 게시할 수 있습니다.

좋은 답변은 질문에 명확하게 답하고 건설적인 피드백을 제공하며 질문자의 전문적인 성장을 장려합니다.

질문 답변하기에 대한 가이드라인

관련 콘텐츠