摘要:使用時(shí)不應(yīng)該通過傳遞使用時(shí)不應(yīng)該通過傳遞根據(jù)安全最佳實(shí)踐章節(jié)在使用時(shí)您不應(yīng)該把放到中第一瀏覽器地址欄本來(lái)就是暴露的第二可以查看瀏覽記錄,找到。
OAuth 2.1 是 OAuth 2.0 的下一個(gè)版本, OAuth 2.1 根據(jù)最佳安全實(shí)踐(BCP), 目前是第18個(gè)版本,對(duì) OAuth 2.0 協(xié)議進(jìn)行整合和精簡(jiǎn), 移除不安全的授權(quán)流程, 并發(fā)布了 OAuth 2.1 規(guī)范草案, 下面列出了和 OAuth 2.0 相比的主要區(qū)別。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 2.1.1 章節(jié)
授權(quán)碼 (Authorization Code) 模式大家都很熟悉了,也是最安全的授權(quán)流程, 那 PKCE 又是什么呢? PKCE 全稱是 Proof Key for Code Exchange, 在 2015 年發(fā)布為 RFC 7636, 我們知道, 授權(quán)碼模式雖好, 但是它不能給公開的客戶端用, 因?yàn)楣_的客戶端沒有能力保存好秘鑰(client_secret), 所以在此之前, 對(duì)于公開的客戶端, 只能使用隱式模式和密碼模式, PKCE 就是為了解決這個(gè)問題而出現(xiàn)的, 另外它也可以防范授權(quán)碼攔截攻擊, 實(shí)際上它的原理是客戶端提供一個(gè)自創(chuàng)建的證明給授權(quán)服務(wù)器, 授權(quán)服務(wù)器通過它來(lái)驗(yàn)證客戶端,把訪問令牌(access_token) 頒發(fā)給真實(shí)的客戶端而不是偽造的,下邊是 Authorization Code + PKCE 的授權(quán)流程圖。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 2.1.2 章節(jié)
在 OAuth 2.1 規(guī)范草案中, 授權(quán)模式中已經(jīng)找不到隱式授權(quán)(Implicit Grant), 我們知道, 隱式授權(quán)是 OAuth 2.0 中的授權(quán)模式, 是授權(quán)碼模式的簡(jiǎn)化版本, 用戶同意授權(quán)后, 直接就能返回訪問令牌 access_token, 同時(shí)這種也是不安全的。
現(xiàn)在您可以考慮替換為 Authorization Code + PKCE 的授權(quán)模式。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 2.4 章節(jié)
在 OAuth 2.1 規(guī)范草案中, 密碼授權(quán)也被移除, 實(shí)際上這種授權(quán)模式在 OAuth 2.0中都是不推薦使用的, 密碼授權(quán)的流程是, 用戶把賬號(hào)密碼告訴客戶端, 然后客戶端再去申請(qǐng)?jiān)L問令牌, 這種模式只在用戶和客戶端高度信任的情況下才使用。
試想一下, 在你手機(jī)上有一個(gè)網(wǎng)易云音樂的APP, 現(xiàn)在要使用qq賬號(hào)登錄, 這時(shí)網(wǎng)易云音樂說, 你把qq賬號(hào)密碼告訴我就行了, 我拿著你的賬號(hào)密碼去QQ那邊登錄, 這就很離譜了!
正確的做法是, 用戶在網(wǎng)易云音樂要使用qq登錄, 如果用戶也安裝了qq 的客戶端, 應(yīng)該喚起qq應(yīng)用, 在qq頁(yè)面完成授權(quán)操作, 然后返回到網(wǎng)易云音樂。如果用戶沒有安裝qq客戶端應(yīng)用, 喚起瀏覽器, 引導(dǎo)用戶去qq的授權(quán)頁(yè)面, 用戶授權(quán)完成后, 返回到網(wǎng)易云音樂。
請(qǐng)注意, OAuth 是專門為委托授權(quán)而設(shè)計(jì)的,為了讓第三方應(yīng)用使用授權(quán), 它不是為身份驗(yàn)證而設(shè)計(jì)的, 而 OpenID Connect(建立在 OAuth 之上)是專為身份驗(yàn)證而設(shè)計(jì), 所以, 在使用 OAuth 授權(quán)協(xié)議時(shí), 你需要知道你使用的客戶端是第三方應(yīng)用程序還是第一方應(yīng)用,這很重要!因?yàn)?OAuth 2.1 已經(jīng)不支持第一方應(yīng)用授權(quán)!
現(xiàn)在您可以考慮使用 Authorization Code + PKCE 替換之前的密碼授權(quán)模式。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 4.3.2 章節(jié)
在使用 access_token 時(shí), 您不應(yīng)該把token放到URL中, 第一, 瀏覽器地址欄本來(lái)就是暴露的, 第二, 可以查看瀏覽記錄,找到 access_token。
正確的做法是, 把 access_token 放到 Http header 或者是 POST body 中。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 4.13.2 章節(jié)
access_token 訪問令牌, refresh_token 刷新令牌, 刷新令牌可以在一段時(shí)間內(nèi)獲取訪問令牌, 平衡了用戶體驗(yàn)和安全性, 在 OAuth 2.1 中, refresh_token 應(yīng)該是一次性的, 用過后失效, 使用 refresh_token 獲取access_token時(shí), 還可以返回一個(gè)新的 refresh_token。
根據(jù) OAuth 2.0 安全最佳實(shí)踐(Security Best Current Practices) 4.1.3 章節(jié)
在 OAuth 2.0 的授權(quán)碼流程中, 需要設(shè)置一個(gè)回調(diào)地址 redirect_uri, 如下
https://www.authorization-server.com/oauth2/authorize?response_type=code&client_id=s6BhdRkqt3&scope=user&state=8b815ab1d177f5c8e &redirect_uri=https://www.client.com/callback
假如有三個(gè)不同的客戶端
這時(shí)可能會(huì)使用一個(gè)通配符的 redirect_uri, 比如 *.client.com, 這樣會(huì)有什么風(fēng)險(xiǎn)呢? 實(shí)際上, 惡意程序有機(jī)會(huì)篡改 redirect_uri, 假設(shè)惡意程序的域名是 https://attacker.com, 然后把 redirect_uri 改成 https://attacker.com/.client.com, 這樣授權(quán)碼就發(fā)送給了惡意程序。
https://datatracker.ietf.org/doc/html/draft-ietf-oauth-v2-1-04
OAuth 2.0 Security Best Current Practice draft-ietf-oauth-security-topics-18
https://fusionauth.io/learn/expert-advice/oauth/differences-between-oauth-2-oauth-2-1
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/124820.html
摘要:總結(jié)總結(jié)歸根結(jié)底并不是要推翻,而是根據(jù)其安全最佳實(shí)踐移除不安全的授權(quán)流程并且對(duì)擴(kuò)展協(xié)議進(jìn)行整合讓原本復(fù)雜如迷宮的規(guī)范成為更易用,更安全的授權(quán)規(guī)范。背景2010年, OAuth 授權(quán)規(guī)范 1.0 (rfc 5849) 版本發(fā)布, 2年后, 更簡(jiǎn)單易用的 OAuth 2.0 規(guī)范發(fā)布(rfc 6749), 這也是大家最熟悉并且在互聯(lián)網(wǎng)上使用最廣泛的版本, 在2012年的時(shí)候, iPhone 5 ...
摘要:結(jié)構(gòu)概述版本協(xié)議中文文檔。根據(jù)已配置的認(rèn)證器元數(shù)據(jù)驗(yàn)證認(rèn)證器的可靠性,確保只有可信賴的認(rèn)證器注冊(cè)使用。利用認(rèn)證機(jī)構(gòu)提供的認(rèn)證元數(shù)據(jù)來(lái)對(duì)認(rèn)證器的真實(shí)性和可靠性進(jìn)行驗(yàn)證。具體來(lái)說,是通過認(rèn)證器元數(shù)據(jù)中發(fā)布的認(rèn)證公鑰完成驗(yàn)證。 FIDO UAF 結(jié)構(gòu)概述 版本 v1.1 FIDO UAF協(xié)議中文文檔。 現(xiàn)在FIDO UAF有關(guān)的文章還比較少,這主要是文檔翻譯和UAF系統(tǒng)概要介紹。 FIDO...
摘要:安全機(jī)制的設(shè)計(jì)現(xiàn)在,大部分的接口都采用架構(gòu),最重要的一個(gè)設(shè)計(jì)原則就是,客戶端與服務(wù)器的交互在請(qǐng)求之間是無(wú)狀態(tài)的,也就是說,當(dāng)涉及到用戶狀態(tài)時(shí),每次請(qǐng)求都要帶上身份驗(yàn)證信息。 App與服務(wù)器的通信接口如何設(shè)計(jì)得好,需要考慮的地方挺多的,在此根據(jù)我的一些經(jīng)驗(yàn)做一些總結(jié)分享,旨在拋磚引玉。 安全機(jī)制的設(shè)計(jì) 現(xiàn)在,大部分App的接口都采用RESTful架構(gòu),RESTFul最重要的一個(gè)設(shè)計(jì)原則就...
摘要:這樣,讓用戶可以授權(quán)第三方網(wǎng)站訪問他們存儲(chǔ)在另外服務(wù)提供者的某些特定信息,而非所有內(nèi)容。 不久之前 Dearmadman 曾寫過一篇 使用 Laravel Socialite 集成微信登錄 的文章,但是似乎還是有些同學(xué)不太明白,詢問著如何集成 QQ 登錄,那么,本篇我們就來(lái)剖析一下 Laravel Socialite 的詳細(xì)內(nèi)容。讓各位同學(xué)都獲得 Laravel Socialite 所...
閱讀 2818·2021-11-24 09:39
閱讀 2576·2021-11-23 09:51
閱讀 2004·2021-11-17 09:33
閱讀 1798·2021-10-22 09:54
閱讀 1901·2021-08-16 11:00
閱讀 3475·2019-08-30 15:53
閱讀 1762·2019-08-30 13:19
閱讀 2933·2019-08-30 12:49