乐趣区

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…
简言之,典型的流程是,app 发起一个请求,让用户在第三方云应用登录和授权,给予 app 一定范围的数据权限(此过程全部导向第三方,app 无法干预和定制),当用户完成授权过程后,第三方云应用将会给 app 传回一个授权码(code)。借此,app 继续调用第三方的云服务 API,获取到最终的 token。因为有三步走(发起,授权,获取 token),这也就是为何经常把这样的 token 叫做三条腿 token。前面提到的创建 bucket,自行上传模型相关的 token,叫做两条腿 token。
Forge 全球资料有个教材演示如何一步步的搭建 app,访问 Autodesk 云应用数据。http://learnforge.autodesk.io…
本文对其中授权认证过程稍微再讲解一下:
1. 首先,Autodesk 的云应用也提供了 oAuth 机制,底层是 Forge 的身份认证服务(大家经常用它来获取 token)。例如 app 访问和操作 BIM 360 客户的数据,发起请求的过程,还要有一个回调端口监听来自 Forge 认证服务传回的授权码。而回调端口必须在创建 app 的时候设置好。如果您的 app 只有两条腿 token 的需要,此项随便给一个 scheme://host 形式的字串即可。

2. 下载教材提供的完整代码工程(以 Node.js 为例):
https://github.com/Autodesk-Forge/learn.forge.viewhubmodels/tree/nodejs
打开工程,定位到 config.js,填写对应的 Client ID, Client Secret 和 Callback URL(一般设置为环境变量)。
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);
});
此工程定义好的回传端口在 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);
}
});
客户端拿到请求地址启动访问,则会弹出 Autodesk 标准的登录对话框

客户输入账号密码后,Autodesk 授权机制会询问,某 app 需要如下数据权限,是否允许。

客户允许后,授权码会发到回调函数

接着,代码调用 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 的机制适用于其它云存储,参考这篇博客

退出移动版