Open ABOUT-ME-APP opened 3 years ago
iOS앱에서 로그인 성공시 전달받는 identityToken(id token)과 authorizationCode를 앱서버로 보낸다.
앱서버에선 identityToken의 유효성을 검증하고 identityToken에 담긴 sub(사용자 아이디)를 사용자의 고유 아이디로 인식하여 정보들을 저장하면 된다.
identityToken이 유효하면 애플 서버(https://appleid.apple.com/auth/token)에 필요한 정보를 담아 request를 보내 access_token과 refresh_token을 얻는다.
이 access_token과 refresh_token은 앱서버의 db에 사용자 아이디와 같은 row에 저장하여 보관하며, iOS앱으로는 access_token과 refresh_token를 모두 보낸다.
access_token을 갱신할 시점을 알기 위해 등록 시간도 함께 저장한다.
appleUserId | appleAccessToken | appleRefreshToken | appleAccessTokenIssueDate |
---|
Request : appleUserId, appleAccessToken
개발 고민 사항
문제가 되는 상황
apple에서 access token 발급 받기
Use this endpoint to either authorize a user by validating the authorization code received by your app, or by validating an existing refresh token to verify a user session or obtain access tokens
apple이 하루에 1번 넘게 refresh_token 을 검증하지 말라고 가이드 'Apple says they may throttle your server if you attempt to validate the refresh token more than once per day.'
accessToken을 통해서 apple에서 사용자 정보를 받아오기 힘듬.
User access token 로그인 > 유저 정보 없음 > IOS에서 회원가입 UI > NINE에서 맞는 정보를 기입 + accesstoken 회원가입 > 가입완료
Request
GET /auth/signin
Token: {naver_access_token}
Response
200 OK
Content-Type: application/json
{
"jwt token":
}
Access token이 잘못된 경우: 401
User를 찾을 수 없는 경우: 404 -> 회원가입으로
Request
POST /auth/signup
Token: {naverAccessToken}
Content-Type: application/json
{
"name": String,
"email": String,
"profileImage": String,
}
Response
200 OK
Content-Type: application/json
{
"token":
}
401 : Access token이 잘못된 경우
409 : 이미 존재하는 유저인 경우
500 : 회원가입 실패
Request
GET /v1/users/me
Authorization: Bearer {jwtToken}
Response
200 OK
Content-Type: application/json
{
"id": 2,
"name": "",
"email": "a@naver.com",
"profileImage": "https://ssl.pstatic.net/static/pwe/address/img_profile.png"
}
{jwtToken} 이 잘못된 경우 / 만료됐을 경우: 401
Request
GET /v1/users/{id}
Authorization: Bearer {jwtToken}
Response 200 OK
Content-Type: application/json
{
"id": 2,
"name": "",
"email": "a@naver.com",
"profileImage": "https://ssl.pstatic.net/static/pwe/address/img_profile.png"
}
{jwtToken} 이 잘못된 경우 / 만료됐을 경우: 401
Request
GET /v1/users
Authorization: Bearer {jwtToken}
Response 200 OK
Content-Type application/json
{
"users": [
{
"id": 2,
"name": "",
"email": "a@naver.com",
"profileImage": "https://ssl.pstatic.net/static/pwe/address/img_profile.png"
}
]
}
{jwtToken} 이 잘못된 경우 / 만료됐을 경우: 401
Request
DELETE /v1/users/me
Authorization: Bearer {jwtToken}
Response
200 OK
GET /auth/refresh
Authorization: Bearer {jwtToken}
200 OK
Content-Type: application/json
{
"token": "eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiLsnbTshKDrqoUiLCJpYXQiOjE2MTM0NjI0NDMsImV4cCI6MTYxMzQ2NjA0M30.93PETTkc-e49YnbH8ZpXCNO0ycDhZguiuw3xcUD2ffU"
}
JWT 발급 및 사용 순서
참고 자료 https://hwannny.tistory.com/71 https://whitepaek.tistory.com/61 https://darkstart.tistory.com/117?category=871909
jwt인증 https://tansfil.tistory.com/59?category=255594
rest template https://advenoh.tistory.com/46