Re: [問題] 以Facebook帳號登入app的問題

看板MacDev作者 (小倫)時間12年前 (2013/07/09 10:44), 編輯推噓0(0015)
留言15則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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)

07/09 15:11, , 1F
How-To:Handle expired access toke http://ppt.cc/XlfS
07/09 15:11, 1F

07/09 15:12, , 2F
by default access token have a 2 hour lifetime
07/09 15:12, 2F

07/09 15:12, , 3F
裡面有說明是如何做到持續登入這件事
07/09 15:12, 3F

07/10 05:55, , 4F
我說的token expire可能有點錯誤,修改一下
07/10 05:55, 4F
※ 編輯: benck 來自: 123.204.86.9 (07/10 05:55)

07/10 05:57, , 5F
補充一下,原文提到自己發token的方式是因為大部份的app都有
07/10 05:57, 5F

07/10 05:57, , 6F
不止一種的登入方式 (fb, twitter, email/password 等..)
07/10 05:57, 6F

07/10 22:55, , 7F
感謝大大回復,原本已經決定要用SSL+token
07/10 22:55, 7F

07/10 22:55, , 8F
但是後來同事覺得用SSL太麻煩,要申請每年還要花錢,
07/10 22:55, 8F

07/10 22:56, , 9F
之後網頁還要改一堆地方...所以就暫時先不用了
07/10 22:56, 9F

07/10 22:57, , 10F
不過fb有提供一個方法
07/10 22:57, 10F

07/10 22:57, , 12F
可以驗證這個token是不是從我的app發出的~
07/10 22:57, 12F

07/11 00:37, , 13F
可是你在把那個token傳回給你的server的時候會被截走
07/11 00:37, 13F

07/11 00:39, , 14F
一些像是cheapssls.com的網站有賣很便宜的SSL
07/11 00:39, 14F

07/11 00:39, , 15F
買rapidssl一年只要9.95
07/11 00:39, 15F
文章代碼(AID): #1HstZsSp (MacDev)
討論串 (同標題文章)
文章代碼(AID): #1HstZsSp (MacDev)