Forge oAuth訪問Autodesk雲應用數據 (三條腿token)

大多數朋友剛開始接觸Autodesk Forge,源於‘網頁瀏覽和管理模型’的需求,即,使用Forge的模型轉換服務和前端Forge Viewer。模型的來源一般是開發者利用Forge數據管理服務建立bucket,上傳模型。而這種方式意味着其應用程序(app)是該模型(數據)擁有者。前端

但在不少場景,模型源並非app全部,而是存儲和管理在某些其它雲應用中,例如BOX,DropBox,百度盤,阿里雲盤,或者Autodesk的BIM 360, Fusion 360。這些雲應用的用戶擁有其數據的權限。Forge的app 要對這些模型訪問或操做的話,則要其它雲應用的用戶進行受權,拿到受權後,才能訪問或操做數據(取決於受權的範圍)。這就是通行的oAuth2.0。在咱們日常使用支付驗證的時候,也是這個機制。推薦閱讀這篇文章,對oAuth作了精煉的講解:
https://www.jianshu.com/p/639...node

簡言之,典型的流程是,app發起一個請求,讓用戶在第三方雲應用登陸和受權,給予app必定範圍的數據權限(此過程所有導向第三方,app沒法干預和定製),當用戶完成受權過程後,第三方雲應用將會給app傳回一個受權碼(code)。藉此,app繼續調用第三方的雲服務API,獲取到最終的token。由於有三步走 (發起,受權,獲取token),這也就是爲什麼常常把這樣的token叫作三條腿token。前面提到的建立bucket,自行上傳模型相關的token,叫作兩條腿token。git

Forge全球資料有個教材演示如何一步步的搭建app,訪問Autodesk雲應用數據。
http://learnforge.autodesk.io...github

本文對其中受權認證過程稍微再講解一下:api

1.首先,Autodesk的雲應用也提供了oAuth機制,底層是Forge的身份認證服務(你們常常用它來獲取token)。例如app訪問和操做BIM 360客戶的數據,發起請求的過程,還要有一個回調端口監聽來自Forge認證服務傳回的受權碼。而回調端口必須在建立app的時候設置好。若是您的app只有兩條腿token的須要,此項隨便給一個scheme://host 形式的字串便可。session

圖片描述

2.下載教材提供的完整代碼工程 (以Node.js爲例):app

https://github.com/Autodesk-Forge/learn.forge.viewhubmodels/tree/nodejs

打開工程,定位到config.js,填寫對應的Client ID, Client Secret 和Callback URL (通常設置爲環境變量)。async

3.此工程定義好的發起受權請求的端口在oauth.js中。它實際上是拼接了一個URL,傳回客戶端,讓客戶端訪問。此URL帶有app的client id,受權方式 (response_type=code),回傳地址和受權的權限範圍。當發起請求,Forge認證服務會和app註冊是對應的信息最比對,所以,必須保證client id和回傳地址和app註冊信息一致。函數

router.get('/oauth/url', (req, res) => {
    const url =
        'https://developer.api.autodesk.com' +
        '/authentication/v1/authorize?response_type=code' +
        '&client_id=' + config.credentials.client_id +
        '&redirect_uri=' + config.credentials.callback_url +
        '&scope=' + config.scopes.internal.join(' ');
    res.end(url);
});
  1. 此工程定義好的回傳端口在oauth.js中,
router.get('/callback/oauth', async (req, res, next) => {
    //從Autodesk認證傳回的受權碼,用於獲取最終的token
    const { code } = req.query;
    const oauth = new OAuth(req.session);
    try {
        await oauth.setCode(code);
        res.redirect('/');
    } catch(err) {
        next(err);
    }
});
  1. 客戶端拿到請求地址啓動訪問,則會彈出Autodesk標準的登陸對話框

圖片描述

  1. 客戶輸入帳號密碼後,Autodesk受權機制會詢問,某app須要以下數據權限,是否容許。

圖片描述

  1. 客戶容許後,受權碼會發到回調函數

圖片描述

  1. 接着,代碼調用Forge的API,獲得token。

圖片描述

token有兩個,一個是執行其餘API操做的token(和兩條腿的token相似,JWT),有效期也是60分鐘。而另一個是refresh token(用戶受權令牌),用於保留用戶受權,有效期14天。因此,當用戶受權一次後,並不用每次都有受權過程,在refresh token有效期間,能夠用此再調用Forge API獲取新的訪問token。 阿里雲

注:

  • 三條腿token,一樣要注意高權限和低權限的token,樣例代碼中有演示。
  • 目前,Forge的app只容許設置一個回調函數端口。而有些其它雲應用例如Azure的app,容許多個。
  • Forge能夠授予app表明某用戶,使用兩條腿token的方式進行數據訪問,在之後文章中再介紹。
  • BIM 360的數據訪問,還須要一個特殊步驟,詳情見 BIM 360 開發帳戶受權
  • oAuth2.0的機制適用於其它雲存儲,參考這篇博客
相關文章
相關標籤/搜索