日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenID 和 OAuth 的区别及第三方登录的安全隐患分析

發布時間:2024/4/14 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenID 和 OAuth 的区别及第三方登录的安全隐患分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:http://itindex.net/detail/48552-openid-oauth-%E6%96%B9%E7%99%BB

發表時間:2014-03-13 19:09 | 作者:天梯夢 出處:http://www.iteye.com

不知道什么時候開始,我們已經習慣了點擊“用XX帳號登錄”或者 "Login with XX" 來訪問網站,但是大多數人可能都不知道這背后涉及的事有多復雜。

?

OpenID 和OAuth 完全是為了兩種不同的需求而生

OpenID 的目標是為了幫助網站確認一個用戶的身份 OAuth 的目標是為了授權第三方在可控范圍下訪問用戶資源

?

OpenID 是怎么認證用戶的?

一個網站如果想要接入 OpenID 認證是非常簡單的,不需要創建應用,不需要 App Key ,不需要 Secret ,只需要將用戶導向 OpenID Provider 的 Entry 并帶上 Callback ,用戶只要同意提供信息,你就可以拿到這個用戶的“唯一標識”。

請注意這里我使用了“唯一標識”這種說法,因為對于網站來說,OpenID Provider 提供的既不是用戶的 UID ,也不是用戶的 E-Mail ,比如 Google 在默認情況下提供的就是一個幾十位長的字符串,這個字符串是隨機生成的,第三方網站無法從中獲得用戶的任何私人信息。這么說可能很抽象,舉個例子:

比如我用 Google 的 OpenID 服務登錄?example.com?, example.com 先把我導向 Google 的授權頁面,我使用 Google 帳號?test@gmail.com?登錄并同意后,頁面跳回?example.com?,?example.com?拿到了我的“唯一標識”,這個唯一標識可能是?cd5f2126c2b2f97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1?,?example.com?從這個字符串里無法獲得任何?test@gmail.com?的個人信息(甚至連郵箱地址也不知道),?example.com?只知道以后只要使用谷歌登錄并返回?cd5f2126c2b2f97ca2d446e52c6ff4baea56fd4bcfcea30afcaaf6b73bcb04a1?這個標識符,那就是我在登錄。

顯而易見,OpenID 是專為登錄認證而生,它使用簡單,門檻很低,但是如果你想在認證過程中獲得用戶的其他信息(比如 E-Mail )就得多做一步了。

?

如何在 OpenID 認證的過程中獲得用戶的部分信息?

傳統的 OpenID 是做不到這一點的,你只能拿到“唯一標識”。不過新版的 OpenID 引入了 "OpenID attribute exchange" 這個概念,這樣第三方可以在用戶的許可范圍內獲得用戶的部分具體信息。

還是上面的例子,如果?example.com?告訴 Google ,我想知道這個用戶的 E-Mail 地址,谷歌就會在授權頁面告訴用戶:“example.com 想要你的 E-Mail 地址”,這時如果用戶點擊同意,example.com?就能在回調請求中拿到?test@gmail.com?這個地址。

對于網站能拿到的信息,不同 Provider 有不同的規定,一般來說包括

aim, blog, country, dob (date of birth), email, fullname, gender, icq, image, jabber, language, msn, nickname, phone, postcode, skype, timezone, website, yahoo

等等。

?

那么,OAuth 又是怎么認證用戶的?

與 OpenID 相比,網站想接入 OAuth 要稍微麻煩點,網站需要先創建應用,拿到 Key 和 Secret ,才能接入 Provider 。

OAuth 的授權過程并不是身份認證的過程,這一點需要特別清楚,網站走完OAuth 流程并拿到用戶的授權 token 后還需要通過 token 調用相應的用戶信息接口才能獲得“唯一標識”,舉個例子:

我想通過新浪微博登錄?example.com?,?example.com?要先把我 redirect 到新浪微博的授權頁面,我通過微博帳號登錄并授權后,頁面跳回?example.com?,?example.com?拿到我的訪問 token 后還要再調用一個接口來獲得我的新浪會員 UID ,這個 UID 就是新浪用戶的“唯一標識”了。

可以看出,OAuth 相對于 OpenID 最大的區別就是,網站實際上是拿到了你的帳戶訪問權限繼而確認你的身份,這是一個安全隱患,因為網站在拿到你的“唯一標識”的同時還拿到了一把你的賬戶的 “臨時鑰匙”。至于網站會不會拿這把鑰匙“干壞事”,這個只有站長心里清楚。同時 OAuth 還比 OpenID 多了幾個額外的請求步驟,登錄所費時間一定是長于 OpenID 的。

大多數的網民是沒有這種意識的,他們對“通過XX登錄”的認證過程中的提示早已視而不見:

有多少人真正注意過左邊的文字?

豆瓣寫的更清楚,XXX應用“希望操作你在豆瓣上的數據”而不是“希望使用你的豆瓣賬號來登錄XXX”

?

國內外主要服務商認證方式對比

提供商 認證方式 認證后網站獲得的權限 安全程度

GoogleOpenID + OAuth如果使用OpenID,網站無法獲得任何額外權限(包括獲得你的Google賬戶名稱),如果使用OAuth,網站須明確說明需要訪問哪些服務的權限并經過用戶逐項同意
FacebookOAuth默認授權情況下只能讀取你的公開信息(不包含E-Mail地址),如果網站需要更高級權限需要明確聲明并經過用戶逐項同意
QQ空間OAuth默認授權情況下只能讀取你的公開信息(不包含QQ號),如果網站需要更高級權限需要明確聲明并經過用戶逐項同意
新浪微博OAuth默認授權情況下可以獲得你的所有信息(私信及身份證號、姓名等除外),并可以你的身份操作絕大多數微博功能
Windows LiveOAuth默認授權情況下只能讀取你的“唯一標識”,如果網站需要更高級權限需要明確聲明并經過用戶逐項同意,默認情況下基本類似于OpenID
騰訊微博OpenID + OAuth如果使用OpenID,網站無法獲得任何額外權限,如果使用OAuth,默認會獲得用戶所有操作的權限,除非應用明確聲明只需要部分權限使用OpenID時,?使用OAuth時,?
搜狐微博OAuth默認授權情況下可以獲得你的絕大多數信息,并可以你的身份操作絕大多數微博功能
網易微博OAuth默認授權情況下可以獲得你的絕大多數信息,并可以你的身份操作絕大多數微博功能
百度OAuth默認授權情況下只能讀取你的公開信息(UID、百度帳戶名),如果網站需要更高級權限需要明確聲明并經過用戶逐項同意
人人OAuth默認授權情況下只能讀取你的公開信息(UID、好友關系等),如果網站需要更高級權限需要明確聲明并經過用戶逐項同意
開心網OAuth默認授權情況下只能讀取你的公開信息,如果網站需要更高級權限需要明確聲明并經過用戶逐項同意

?

總結

總體來說,國外的網站都比較正規,第三方網站幾乎無法獲得任何私人信息,而國內網站對個人信息的保護水平高低不齊,某些網站甚至沒有任何保護,新浪微博等網站的“第三方接入”,用一句話來說,不管你敢不敢用,我反正是不敢用。

?

原文:?https://www.idndx.com/2012/04/23/openid-vs-oauth-and-the-security-risk-of-oauth-login/

?

轉載于:https://www.cnblogs.com/Ceri/p/7776581.html

總結

以上是生活随笔為你收集整理的OpenID 和 OAuth 的区别及第三方登录的安全隐患分析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。