Programming/AndroidProgramming

Firebase 4) Firebase 인증에 관해서.

Polyglot 2018. 7. 7. 17:07

Firebase 권한에 관해서

이 글은 Udacity 강의 내용을 정리해서 올린 글입니다.

이전 포스팅에서 파이어베이스 데이터 권한을 read와 write 모두 true로 설정해서 어떤 사람이라도 입력을 받거나 받을 수 있도록 했습니다.


하지만 실제로 이런식인 앱을 출시하게 된다면 어느 누구나 앱에 접근할 수가 있어서 데이터의 보안이 취약하게 됩니다. 따라서. 권한인증(Authentication)을 통해 로그인과 로그아웃을 통해 우리 앱의 회원인 사람들만 데이터에 접근할 수 있어야합니다.

또한 많은 앱중 결제를 한 사람과 결제를 안한사람의 차별을 두어야 되는 경우도 있습니다. 즉 free버전과 paying 버전의 이용자를 차별화 시킬 경우도 있는데. 이러한 문제도 권한 인증을 이용하여 해결할 수가 있습니다.

파이어베이스 권한 타입

파이어 베이스에는 권한 3가지의 권한 타입이 있습니다.

  1. Read : 유저가 읽을 수가 있는지
  2. Write : 유저에 의해 쓰여질 수가 있는지
  3. Validate : Child노드나 데이터 타입을 가질 수가 있는지 대략적인 형태 정의

미리 정의된 변수들(키워드)

  1. Now : 밀리초 단위의 현재 시간을 뜻합니다.
  2. Root: 데이터베이스의 루트에 해당하며, 이 변수를 사용해서 어떤 모든 데이터에도 접근이 가능합니다.
  3. newData : 쓰기가 허용되어있다면, 결과로 출력된 데이터를 뜻합니다.
  4. Data : 현재 실행되고 있는 위치에서의 데이터를 뜻합니다.
  5. $variables : wildcard($) 경로는 동적 child 키와 id를 나타내기 위해서 사용합니다.
  6. Auth : 인증된 사용자라면 토큰을 가지며 인증된 사용자가 아니라면 null 값을 가지게 됩니다.

Auth 변수에 대해

Auth 변수는 JSON객체를 가지면서 데이터를 저장하고 있습니다. JSON 토큰은 제공자(Provider) 값과, uid, 파이어베이스 Auth ID 토큰을 가집니다.

제공자란, email, 구글, 페이스북을 통해서 로그인을 하는 것을 말합니다. Uid란 유저 id를 뜻하며, 모든 공급자 사이에서 유일하게 보장된 값입니다. 가령 구글을 통해 로그인한 사람과 이메일 패스워드로 로그인 한 사람의 id 값은 절대로 겹치지 않습니다. Auth ID는 웹 토큰이고 Auth 웹 토큰 안에 여러 데이터가 포함 되어있습니다.

  1. Email : 계정에 연결된 email 주소값
  2. Email_verified : 만약 email주소값으로 인증을 했다면, true로 설정됩니다.
  3. Name : 유저의 이름
  4. Sub :유저의 파이어베이스 uid 값
  5. Firebase.identities : 유저의 관련된 정보를 사전형태로 가지는 데이터를 말합니다.
  6. Firebase.sign_in_provider : 인증 ID 토큰을 가지는 프로바이더를 뜻합니다.

인증에 관한 향상된 규칙

때때로, 사람들마다 서비스를 다르게 제공해줄 때가 있습니다. 예를 들자면 앱에 어떤 상품을 구매한 사람과 구매하지 않는 사람을 다르게 대우해줄 필요가 있는데.. 이를 위해서 향상된 규칙을 적용할 필요가 있습니다.

위 코드는 파이어베이스 데이터베이스입니다. users 데이터에서는 uid1, uid2, uid3 등 유저들이 있는데 paid 변수로 결제를 했는지를 구분합니다.

위 코드는 데이터 접근 보안 규칙입니다. special_chat의 message 객체를 읽거나 쓰려면 /users/auth.uid/paid가 true 일때 사용이 가능하다는 뜻을 나타냅니다.

연속 규칙

연속 규칙은 부모단의 변수를 상속받는 규칙입니다. 자식단에서 부모단의 변수를 수정한다면 자식단의 변수가 실제로 적용이 됩니다. 클래스의 상속의 개념이랑 비슷합니다.

위의 코드를 보면 "rules"는 "chat"을 자식으로 갖고 "chat"은 "admin_blog"를 자식으로 가집니다.

여기서 "chat"은 read = true write = true로 설정했지만 admin_blog는 write = false로 설정해두었기 때문에 admin_blog는 read = true , write = false를 변수로 갖습니다.

Validate

validate는 구조, JSON객체 트리, 데이터의 형태를 사용자가 정의한 데로 만드는데 사용합니다.

예를 들자면 모든 메시지 객체는 이름과 텍스트 객체 외엔 어떤 데이터가 없게 만든다는지, Name 값이 100글자 이하로 만든다는지 등을 정의한데로 만들 수가 있습니다.

위 코드는 string의 길이가 100자 이하일 때 true가 반환되는 형태를 정의한 것입니다.

다음 포스팅에서는 FirebaseAuthUI를 사용해서 구글, 이메일 로그인을 직접 구현을 하도록하겠습니다.