• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于OAuth2認(rèn)證的RESTAPI設(shè)計(jì)與實(shí)踐

    2021-07-19 20:30:53劉曉暉秦子實(shí)
    電腦知識(shí)與技術(shù) 2021年15期
    關(guān)鍵詞:令牌用戶名字段

    劉曉暉 秦子實(shí)

    摘要:隨著微服務(wù)技術(shù)架構(gòu)與企業(yè)各業(yè)務(wù)單元中臺(tái)的興起,越來越多的系統(tǒng)會(huì)開放各種用途的REST API,對API調(diào)用者的身份認(rèn)證成為保護(hù)數(shù)據(jù)安全的第一道防線。認(rèn)證方法應(yīng)具有易集成部署與API耦合度低等特性,以方便對現(xiàn)有API認(rèn)證方式的改進(jìn)。本文介紹基于OAuth 2.0標(biāo)準(zhǔn)的密碼式令牌認(rèn)證的設(shè)計(jì)與部署方法,可對REST API進(jìn)行用戶名密碼式身份認(rèn)證及權(quán)限鑒別,該方法具有代碼量低易于部署等特點(diǎn),適用于企業(yè)內(nèi)部各應(yīng)用系統(tǒng)的REST API認(rèn)證。

    關(guān)鍵詞:OAuth 2.0;REST API;Python

    中圖分類號(hào):TP393? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A

    文章編號(hào):1009-3044(2021)15-0056-02

    1 概述

    隨著企業(yè)間業(yè)務(wù)系統(tǒng)及服務(wù)的聯(lián)系越來越緊密,各系統(tǒng)和服務(wù)均開放了較多的API,供其他系統(tǒng)或用戶進(jìn)行調(diào)用。為了保護(hù)各系統(tǒng)的數(shù)據(jù),需要對API調(diào)用者做出身份認(rèn)證,并進(jìn)行權(quán)限鑒別。普通的API第三方身份認(rèn)證方式為第三方系統(tǒng)直接索取并提交用戶的身份認(rèn)證信息,API獲得身份信息且確認(rèn)后返回?cái)?shù)據(jù)。該機(jī)制索取用戶身份信息,首先存在信任問題和信息泄露風(fēng)險(xiǎn);其次用戶身份認(rèn)證信息缺少失效機(jī)制,無法限制第三方獲取數(shù)據(jù)的時(shí)效;此外,使用用戶身份認(rèn)證的權(quán)限通常即使用系統(tǒng)本身的權(quán)限管理機(jī)制,耦合程度較高,不利于開發(fā)、管理及后期擴(kuò)展。

    OAuth 2.0(以下簡稱OAuth2)是目前較流行的授權(quán)機(jī)制,通常用于向第三方應(yīng)用提供用戶數(shù)據(jù)或其他接口數(shù)據(jù)。OAuth2使用令牌(token)代替用戶名密碼進(jìn)行身份認(rèn)證與權(quán)限鑒別,因此用戶信息泄露較低,并可以設(shè)置令牌時(shí)效,也可以直接在令牌中寫入權(quán)限信息。

    本文針對普通的API第三方認(rèn)證方式中的不足,在企業(yè)內(nèi)部網(wǎng)絡(luò)中,使用OAuth2密碼式令牌進(jìn)行第三方應(yīng)用系統(tǒng)的身份認(rèn)證及權(quán)限鑒別。文中代碼示例使用Python的FastAPI庫進(jìn)行演示。

    2 OAuth2標(biāo)準(zhǔn)簡介

    2.1 OAuth 2.0標(biāo)準(zhǔn)

    OAuth 2.0標(biāo)準(zhǔn)定義在RFC 6749文件中,引入令牌作為授權(quán)層,以隔離用戶(資源所有者)與第三方(資源請求者)。即OAuth2的作用就是向第三方發(fā)放令牌。標(biāo)準(zhǔn)中定義了四種授權(quán)方式:授權(quán)碼、隱藏式、密碼式、客戶端憑證。本文主要介紹在企業(yè)內(nèi)部網(wǎng)絡(luò)中各系統(tǒng)間API的認(rèn)證及鑒權(quán)操作,因此僅介紹密碼式OAuth2的應(yīng)用。

    2.2 密碼式OAuth2原理

    密碼式OAuth2的認(rèn)證過程為四種授權(quán)方式中較簡單的一種。僅需要第三方向應(yīng)用系統(tǒng)提供一次用戶的用戶名密碼,確認(rèn)后應(yīng)用系統(tǒng)向第三方發(fā)放令牌,此后第三方均使用該令牌進(jìn)行數(shù)據(jù)請求,具體過程如下:

    假設(shè)用戶在a.com中存放有數(shù)據(jù),其中a.com/me用于查看用戶個(gè)人信息,a.com/me/items用于查看用戶擁有的所有條目。此時(shí)用戶希望b.com獲取其在a.com中的數(shù)據(jù),則b.com主機(jī)向a.com/token發(fā)送POST令牌請求,表單附帶用戶的用戶名密碼及希望獲得的權(quán)限。若a.com收到請求后通過身份認(rèn)證及權(quán)限鑒別,則向b.com返回令牌(對稱加密),令牌包含用戶、權(quán)限及令牌時(shí)效。

    此后,b.com向a.com請求數(shù)據(jù)時(shí)(如請求a.com/me),僅需要在請求頭部附帶Authorization字段,附帶令牌數(shù)據(jù)即可。a.com將解析請求頭部中的令牌,解密令牌確認(rèn)身份及權(quán)限后,返回?cái)?shù)據(jù)。

    可以發(fā)現(xiàn),整個(gè)過程除了在第一次請求中傳遞用戶信息外,在令牌時(shí)效內(nèi)的其他請求均僅通過令牌確認(rèn)身份及權(quán)限。過程如下圖所示:

    3 密碼式OAuth2應(yīng)用

    3.1 應(yīng)用環(huán)境

    本文使用Python的FastAPI構(gòu)建REST API,均使用json封裝數(shù)據(jù)。FastAPI支持密碼式OAuth2,使用jwt加密token。

    3.2 令牌發(fā)放接口設(shè)計(jì)

    假設(shè)原系統(tǒng)目前具有兩個(gè)REST API:a.com/me和a.com/me/items,為了支持OAuth2,需要添加a.com/token接口用于身份認(rèn)證及令牌發(fā)放。本文為了方便演示,使所有API使用同一發(fā)布,發(fā)放令牌的token與原有的兩個(gè)API應(yīng)共享同一個(gè)SHA256密鑰,用于加解密密鑰。本文使用openssl生成一個(gè)32位的密鑰,設(shè)置令牌時(shí)效時(shí)間15分鐘。

    a.com/token通過POST方式接收Form表單,按照密碼式OAuth2標(biāo)準(zhǔn)規(guī)定,表單應(yīng)包括四個(gè)字段:grant_type字段值固定為password;scope字段值為約定的權(quán)限碼,權(quán)限碼間用空格分隔;username字段為用戶名;password字段為密碼。

    a.com/token返回一個(gè)使用jwt加密的json對象,access_token鍵的值即為令牌,這是一個(gè)加密的json對象,token_type值固定為bearer,其內(nèi)容類似:

    加密的內(nèi)容解密后為{"sub": "johndoe", "scopes": ["me", "items"], "exp": 1593831859},通常約定sub鍵對應(yīng)令牌主題,即用戶名,scopes鍵對應(yīng)權(quán)限列表,exp鍵對應(yīng)時(shí)效時(shí)間戳。

    3.3 現(xiàn)有API集成令牌認(rèn)證設(shè)計(jì)

    首先需要建立oauth2認(rèn)證模板,包括指明認(rèn)證方式為密碼式、認(rèn)證接口為a.com/token、權(quán)限包括“me”和“items”:

    接下來需要編寫一個(gè)認(rèn)證函數(shù),用于解析請求頭部的Authorization字段,獲得令牌并使用jwt進(jìn)行解密,其函數(shù)簽名如下:

    現(xiàn)有的其他API需要集成密碼式OAuth2認(rèn)證時(shí),只需要修改函數(shù)簽名即可,例如檢查用戶賬戶是否可用的函數(shù),只需在簽名中增加認(rèn)證函數(shù)和執(zhí)行現(xiàn)有接口所需的權(quán)限:

    當(dāng)調(diào)用現(xiàn)有API get_current_active_user時(shí),認(rèn)證函數(shù)get_current_user的security_scopes參數(shù)即為了現(xiàn)有API索取的權(quán)限列表“["me"]”,token參數(shù)即為此次請求頭部附帶的認(rèn)證令牌。使用jwt解析token后即可獲得用戶名和此次令牌包含的權(quán)限列表,使用用戶名查詢該用戶所具有的權(quán)限,與令牌中包含的權(quán)限以及API索取的權(quán)限進(jìn)行對比,即可明確此次請求是否被授權(quán)。

    所需多個(gè)權(quán)限的API定義時(shí),可直接在scopes列表中添加多個(gè)權(quán)限碼,也可以進(jìn)行鏈?zhǔn)秸J(rèn)證,如下所示:

    a.com/me/items/接口需要“me”和“item”兩個(gè)權(quán)限,可以復(fù)用a.com/me/的認(rèn)證方法get_current_active_user先索取“me”權(quán)限,再使用本接口僅索取“items”權(quán)限即可。只要權(quán)限列表鏈中的一個(gè)權(quán)限未通過認(rèn)證,接口就會(huì)返回訪問未授權(quán)。

    4 結(jié)束語

    本文介紹了在企業(yè)內(nèi)部場景中,使用OAuth2認(rèn)證進(jìn)行API第三方認(rèn)證的設(shè)計(jì)方法。在對現(xiàn)有API添加OAuth2認(rèn)證功能時(shí),該方法具有安全性高、代碼改動(dòng)少的特點(diǎn)。此外OAuth2所用的對稱加解密執(zhí)行效率高,對現(xiàn)有系統(tǒng)的執(zhí)行效率影響較小。因此,該方法是一種對現(xiàn)有系統(tǒng)影響較小的API第三方認(rèn)證集成方法。

    【通聯(lián)編輯:梁書】

    猜你喜歡
    令牌用戶名字段
    《護(hù)士進(jìn)修雜志》投稿程序
    圖書館中文圖書編目外包數(shù)據(jù)質(zhì)量控制分析
    稱金塊
    基于路由和QoS令牌桶的集中式限速網(wǎng)關(guān)
    動(dòng)態(tài)令牌分配的TCSN多級(jí)令牌桶流量監(jiān)管算法
    機(jī)智的快遞員
    CNMARC304字段和314字段責(zé)任附注方式解析
    無正題名文獻(xiàn)著錄方法評(píng)述
    關(guān)于CNMARC的3--字段改革的必要性與可行性研究
    令牌在智能小區(qū)訪客系統(tǒng)的應(yīng)用
    科技傳播(2011年10期)2011-06-14 02:29:04
    班玛县| 兴城市| 甘泉县| 岚皋县| 大厂| 云霄县| 平昌县| 乳山市| 山丹县| 建昌县| 上栗县| 古田县| 淮安市| 重庆市| 平定县| 辽阳县| 阜宁县| 桑植县| 汨罗市| 远安县| 星子县| 垫江县| 宁南县| 桦甸市| 绥滨县| 开原市| 温宿县| 福泉市| 潍坊市| 公安县| 南和县| 阿克| 白朗县| 二连浩特市| 壶关县| 莆田市| 临漳县| 屏东市| 太和县| 新丰县| 乐东|