作者benck (小倫)
看板MacDev
標題Re: [問題] 以Facebook帳號登入app的問題
時間Tue Jul 9 10:44:03 2013
※ 引述《kiii210 (Johnny.T)》之銘言:
: 各位前輩好~想請問一下關於用Facebook賬號來登入app的問題~
: 現在很多app已經用這個方法,直接用使用者的Facebook姓名,mail來註冊一個賬號
: 省去很多填資料的麻煩~
我不清楚你的app是否會用到facebook的功能(分享文章等),
我下面的回答是假設你都不會用到除了登入之外的功能。
: 目前公司網站已有做Facebook登入功能,
: 用Facebook帳號登入之後,會把姓名,Mail存起來當做一個會員~
: 現在公司app也打算用這個方法,網站跟app的資料要互通~
: 目前想到的做法是這樣:http://ppt.cc/-UEt
: 1. 點擊Facebook登入
: 2. 登入成功,取得access_token
: 3. 傳回給伺服器,由伺服器處理註冊賬號的動作
: 疑問:
: 1) 這中間是否會有安全性的問題?因為拿到token就等於有帳號的存取權限
: 是否該透過https加密後送出?
fb給的access_token極度建議用https傳送回給自己。
不過安全性的問題的話..depends on 你要的權限,若你僅要求最基本的權限(拿fbid),
基本上不會對使用者的fb造成什麼事情,不過若用一般http傳輸,
會讓駭客有可能用別人的帳號,進入你們的服務。
: 2) 安全性問題2
: 開發網站的同事擔心有心人拿到app與伺服器溝通的api網址後會亂搞,
: 目前想法:傳access_token給伺服器之後,由伺服器拿去與Facebook Graph Api驗證
: https://graph.facebook.com/me/?access_token=
: 如果回傳的verified是true,代表這個使用者沒問題,可以放心的做溝通
: 反之拒絕回傳資料。(http://ppt.cc/HBEU)
: 這樣是否可以?
大致看起來可以,不過再次強調,與你們server的溝通建議用https。
: 3) 該如何保持"登入狀態"?
: 開發網站的同事表示不想每次都跟Facebook驗證token是否有效,
: 那我是不是在跟api做溝通的時候把cookie存在UserDefaults裡面,
: 待下次跟api做溝通把cookie也一併送出去即可?
: 感謝耐心看完~因為沒開發這方面的經驗~網路上文章也很少~
: 主要是顧慮安全性問題,不然應該不會有這麼多東西要擔心~@@"
: 謝謝!
有幾個方法,我先假設在你的會員資料庫有儲存uid和fbid。
uid代表使用者在你們服務中的unique id,
fbid就是他在fb的unique id(一個不定長度的字串,如100000123456789)
1. 每次和fb驗證該token的fbid是啥,再查你的uid。(如你所說)
2. 一樣每次都傳fb access_token 回你的server,但是你的server有create一個
token的快取資料表,把access_token和對應的fbid存起來。
3. 第一次和fb取得fbid之後,把這個fbid和你的uid傳回app端,
把fbid+uid當成你api第二次之後的驗證方式,這個方式有點不大安全,但最簡單。
不過駭客除了要先猜出你的api介面,還要有正確的fbid+uid配對。
4. 第一次和fb取得fbid之後,你再查到你的uid之後,自己產生token。
(我覺得這應該是大部份app的做法)
譬如說,一個使用者在你的服務中uid是123,
你產生一個token 202cb962ac59075b964b07152d234b70 (123的md5),
(當然你絕對不會用md5(uid)產生token)
把這個token傳回app,存在app的userdefault,
順便把token/uid pair 存在伺服器資料庫,
每次和伺服器要新資料時,就把這個token當認證工具。
在產生token的時候記得考慮,token應該要是unique的。
再次強調,所有過程必用https。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 123.204.86.9
※ 編輯: benck 來自: 123.204.86.9 (07/09 10:44)
2F:→ charlesdc:by default access token have a 2 hour lifetime 07/09 15:12
3F:→ charlesdc:裡面有說明是如何做到持續登入這件事 07/09 15:12
4F:→ benck:我說的token expire可能有點錯誤,修改一下 07/10 05:55
※ 編輯: benck 來自: 123.204.86.9 (07/10 05:55)
5F:→ benck:補充一下,原文提到自己發token的方式是因為大部份的app都有 07/10 05:57
6F:→ benck:不止一種的登入方式 (fb, twitter, email/password 等..) 07/10 05:57
7F:→ kiii210:感謝大大回復,原本已經決定要用SSL+token 07/10 22:55
8F:→ kiii210:但是後來同事覺得用SSL太麻煩,要申請每年還要花錢, 07/10 22:55
9F:→ kiii210:之後網頁還要改一堆地方...所以就暫時先不用了 07/10 22:56
10F:→ kiii210:不過fb有提供一個方法 07/10 22:57
12F:→ kiii210:可以驗證這個token是不是從我的app發出的~ 07/10 22:57
13F:→ benck:可是你在把那個token傳回給你的server的時候會被截走 07/11 00:37
14F:→ benck:一些像是cheapssls.com的網站有賣很便宜的SSL 07/11 00:39
15F:→ benck:買rapidssl一年只要9.95 07/11 00:39