前言: 話說前陣子爸爸家陽台不斷出現米奇老鼠,立刻清理陽台所有東西,然後又跟市政部門反映問題,可是情況還沒有好轉,米老鼠來完一隻又一隻,我爸陽台在老鼠界應該是網紅打卡聖地(誤),要不然就是米奇老鼠版米奇林三星餐廳(?) 雖然我們抓到了三隻,到上兩個禮拜為止還有至少一隻一直抓不到,每天淩晨還會來吃事後煙留下老鼠屎,真_北。 這隻老鼠對傳統攻擊有抗性,有IT9朋友前陣子用Raspberry pi自製了一台electric mouse trap ,用pi的超聲波雷達放在鞋盒裡,鞋盒裡有一堆食物,底部佈了鐵網,偵測到有老鼠進去以後立即關門通9V電,通個1分鐘再放牠離開,大推我自己也造一台 (Youtube片搜尋一大堆,人類真變態啊,朋友好變態啊)。可是我覺得這樣又好像有點太殘忍,不如先偵測牠們什麼時候來,嚇嚇牠們看看有沒有效果再說吧。 目的: 用Raspberry pi及手上有的感測器弄一隻放陽台用來偵測和嚇嚇老鼠的東西,並把紀錄圖像化到雲端給老爸使用。 邏輯及設計: 當老鼠進入偵測範圍,Motion Sensor偵測到生物活動Raspberry pi 處理來自Motion Sensor的訊號,如果夠強的話開始準備作出回應 Raspberry pi在Angry cats sounds中隨機選出叫聲,再經由Speaker輸出貓叫聲 Raspberry pi指示強光元件發出強光束照射目標 把偵測計數上傳到雲端圖表 材料: Sensor 在網路上看了一些Raspberry pi wild animal camera ,很多也是用Motion Sensor先偵測動物再來,我用的是PIR Motion Sensor被動式紅外線感測器,有低耗電成本便宜的好處。[1],而且可手動調整靈敏度及反應時間。 PIR Motion Sensor就是下面這個 圖片來源: learn.adafruit.com 可手動調整敏感度還有反應時間,這個有點不好調,要試好多遍才找到最佳位置。 可以在Raspbian中輸入pinout查詢GPIO避免插錯 圖片來源: learn.adafruit.com . 一台Raspberry pi 這次使用較舊的Raspberry pi model B+ 萬一老鼠生氣被咬爛錢包也不太痛 . 一張
前言:
公司最近打算使用由政府提供的市民登入平台,原因是利用這個平台登入的帳號具有等同自然人的法律效力,其他廠商不用老遠跑來公司簽約可以直接網路上搞定。政府使用的技術是OAuth2認證機制,所以小弟必需被逼研究熟悉整個流程再把公司的系統整合進去。
老實說,Oauth2一開始還真的看得我一頭霧水(霧煞煞),因為OAuth2跟傳統UserName Password的認證方式很不一樣,而且OAuth2在網站上及APP上的實現方法也不同,再加上網路上的圖文說明也很複雜。最後找到神人「鴨七」大大整理出三百多頁的PPT[1]及他在網站上的詳細介紹[2],來回看了幾次終於比較明白整套理論,以下說明是精簡版本,全部概念以網站架構為中心,未必完全適用於APP及Winform:
為什麼要OAuth2?
政府用的是OAuth2小弟又有什麼辦法呢 我個人的看法是使用OAuth2的網站必須先向提供OAuth2的服務提供者進行登記,再加上對用戶的認證以後,就相當於有兩層的保護。再加上網站從頭到尾沒有碰過你的使用者帳號跟密碼,減少被盜取的可能,當然trust機制還是會有很多漏洞,例如User亂授權,不過已經是社交層面了。
OAuth2常用角色
OAuth2認證流程種類
可以分成四類:
OAuth2認證的簡易流程說明:
如果真的沒時間看懂全部的話,可以看看以下的部分。以下利用facebook的 OAuth2 provider為例子,說明如何使用OAuth2。
好,開始吧:
現在再以facebook為例子。假設你的個人資料儲存在facebook,在OAuth2的基礎下公司網站並不能直接拿著你facebook帳號跟密碼去facebook的伺服器取得你的個人資料。公司網站必須透過redirect把你轉到facebook Authorization Server的授權頁面,你在Authorization Server的頁面按下授權後Authorization Server會跟據你在facebook之前登記的client_id,client_secret發一張Access Token給公司網站,這張Access Token就像門票一樣,公司網站可以拿著Access Token、 client_id、 client_secret到facebook的Resource Server換領獎品取得你的個人資料 (Profile)。 Access Token本身具有時限性、還說明了可以取得的資訊量(scope), 就像演唱會的門票過期就沒用,而且門票只能進入場館的某個區域,整個概念就像圖1。
那政府登入網站呢?
把以上說明「facebook」換成「政府登入平台」再看一次,原理是一模一樣。
實作方法
包括OAuth2是開源專案,當然可以跟著說明文件慢慢寫Https request(我試過,我真的試過),不過光是注意http表頭格式、request規格已經想放棄了。所以官方網站詳細推介一系列的懶人包可以直接拿來使用不需要專注每一項細節,至於Microsoft陣營的話我是用比較多人使用的DotNetOpenAuth。
總結:
沒有完全明白OAuth2沒關係,因為複雜的部分已經有神人幫忙寫好,只要知道基本概念,有問題的時候會trace就行。
References:
1. 簡單易懂的 OAuth 2.0byYu-Cheng Chuang
2. OAuth 2.0 筆記 Yu-Cheng Chuang
3. OAuth2 官方網站 , 有很多Coding的例子
4. OAuth2 Developer guide , 介紹OAuth2
5. http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 理解OAuth 2.0
公司最近打算使用由政府提供的市民登入平台,原因是利用這個平台登入的帳號具有等同自然人的法律效力,其他廠商不用老遠跑來公司簽約可以直接網路上搞定。政府使用的技術是OAuth2認證機制,所以小弟必需
老實說,Oauth2一開始還真的看得我一頭霧水(霧煞煞),因為OAuth2跟傳統UserName Password的認證方式很不一樣,而且OAuth2在網站上及APP上的實現方法也不同,再加上網路上的圖文說明也很複雜。最後找到神人「鴨七」大大整理出三百多頁的PPT[1]及他在網站上的詳細介紹[2],來回看了幾次終於比較明白整套理論,以下說明是精簡版本,全部概念以網站架構為中心,未必完全適用於APP及Winform:
為什麼要OAuth2?
政府用的是OAuth2小弟又有什麼辦法呢
OAuth2常用角色
- Client: 通常是指你自己開發的系統。
- Authorization Server: 處理認證、發出access Token的伺服器。
- Resource Server:保持資源的伺服器,在facebook的例子就是你的個人資料。
- Resource Owner: 就是人,或者User。
- User Agent: 用戶代理,通常指的是Browser。
OAuth2常用術語
- Client ID and Client secret:
由於使用OAuth2的Client網站要先向Authorzation Endpoint(OAuth2提供者)進行登記,說明用途及Redirect URL,登記完之後Client ID就像OAuth2提供者發給你網站的身份證字號,通常為亂數, 而srcret就是公開金鑰。 - Redirect URL:
由於當完成OAuth2程序後轉回Client網站的動作是由OAuth2提供者直接執行,以防止CSRF (Cross-site request forgery)攻擊。所以必須向Authorization Server登記URL。 - AccessToken:
要讀取Resource Server的重要Resource,唯一的方法就是用AccessToken。 而整個OAuth2的授權流程目的就是獲得AccessToken (寶庫的鑰匙)。 - AccessToken本身可設期限及Scope (獲得多少資料)。
- Authorization code:
Client網站向 Authorzation Endpoint發出Request, Authorzation回傳授權頁面給Resource Owner,如果Resource Owner確認授權,Client會收到一組Authorization Code。Client拿著Authorization Code、Client Id、 Client secret、 已登記的Redirect URL去拿可以讀取資料的AccessToken。
OAuth2認證流程種類
可以分成四類:
- Authorization Code Grant Flow:
流程最嚴密的模式,下面的例子也是用這種。 - Implicit Grant Flow:
直接跳過先獲得Authorization Code再換取Access Token的過程,直接發AccessToken給User Agent。 - Resource Owner Password Credentials Grant Flow:
用戶向Client直接提供自己的名稱跟密碼,Client拿著使用者的名稱跟密碼去Authorization Server獲得授權。通常用在對客戶端高度信任的情況下,或者OAuth2提供者自己寫的APP才使用,例如facebook自己的手機APP。 - Client Credentials Grant Flow:
Authorization Server看到信任的Client直接發AccessToken。
OAuth2認證的簡易流程說明:
如果真的沒時間看懂全部的話,可以看看以下的部分。以下利用facebook的 OAuth2 provider為例子,說明如何使用OAuth2。
- 公司網站必須先在facebook註冊並填寫RedirectURL,需要填寫RedirectURL是由於當完成OAuth2程序後轉回公司網站的動作是由Facebook直接執行,以防止CSRF (Cross-site request forgery)攻擊。
- 公司在facebook註冊後會獲得一組client_id及client_secret,以確認就算使用者授權存取他的個人資料後還是只有公司網站才能存取。
好,開始吧:
圖1: 鴨七大的認證概念PPT擷圖[1]
那政府登入網站呢?
把以上說明「facebook」換成「政府登入平台」再看一次,原理是一模一樣。
實作方法
包括OAuth2是開源專案,當然可以跟著說明文件慢慢寫Https request(我試過,我真的試過),不過光是注意http表頭格式、request規格已經想放棄了。所以官方網站詳細推介一系列的懶人包可以直接拿來使用不需要專注每一項細節,至於Microsoft陣營的話我是用比較多人使用的DotNetOpenAuth。
動手做:在ASP.net MVC上使用OAuth2 (以DotNetOpenAuth為例子)
我是參考ASP.NET中「OWIN OAuth 2.0 Authorization Server」這篇文章「Create OAuth 2.0 Clients」這一節。
- 建立 _webServerClient 物件:
設定Authorization Server、Resource Server位置、Client Id, secret Id參數。 - 取得AccessToken:
由於DotNetOpenAuth已經幫你處理好拿authorization code換accessToken的步驟,所以不用擔心。 - 取得Resource
總結:
沒有完全明白OAuth2沒關係,因為複雜的部分已經有神人幫忙寫好,只要知道基本概念,有問題的時候會trace就行。
References:
1. 簡單易懂的 OAuth 2.0byYu-Cheng Chuang
2. OAuth 2.0 筆記 Yu-Cheng Chuang
3. OAuth2 官方網站 , 有很多Coding的例子
4. OAuth2 Developer guide , 介紹OAuth2
5. http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html 理解OAuth 2.0
Comments
Post a Comment