C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken
BIMFACE 平台为开发者提供了大量的服务器端 API 与 JavaScript API,用于二次开发 BIM 的相关应用。
BIMFACE 所有的 RESTful API 都有对应的鉴权机制保护,目前 BIMFACE 支持两种鉴权方式:
- Access token
-
代表自身应用的身份,使用应用的 appkey, secret,通过调用/oauth2/token接口获取。
- View token
-
代表对单个模型/集成模型/模型对比的访问权限,使用 access token,通过调用/view/token或其他相关接口获得。
使用 Access token,可以对自己应用内的文件发起文件上传,下载,删除,模型转换,模型集成,模型对比等操作, 同时也能访问所有 BIMFACE 的数据接口获取转换后的模型BIM信息;而 View token 只代表对单个模型/集成模型/模型对比的临时的访问凭证, 只能访问对应模型的数据接口,通过使用应用的 Access token 调用下面的接口可以获得。 通常情况下,View token 可以直接传入前端 JSSDK 用来加载/浏览模型。
Access token 有效期为7天, 除非 token 被注销,Access token 在7天内不会发生改变; 而 View token 只是一个临时的访问凭证,有效期为12小时。但是为了减少用户重复请求 View token 的次数, 每次使用 View token 都会重置有效期为12小时。这样如果你的模型持续有人访问,View token 会一直有效, 只有在12小时内,没有使用 View token 的任何调用,View token 才会失效。
Access token 只能使用 appkey, secret 通过/oauth2/token接口获取; 类似的,View token 必须通过有效的 Access token 并提供对应的源文件Id以及集成模型Id信息来获取。
获取 Access token 接口中使用的 Authorization,是将字符串 appKey:appSecret 拼接后(中间用冒号连接),对其进行BASE64编码, 然后在编码后的字符串前添加字符串Basic和一个空格, 即:“Basic [Base64Encode(“appKey:appSecret”)]“。
其他接口中使用的 Header Authorization, 是将你的 Access token 的字符串前添加字符串bearer和一个空格,
即:“bearer [access token]" 。
BASE64编码与解码的方法:
/// <summary>
/// 使用 UTF8 编码格式,对字符串进行进行 Base64 方式编码(加密)
/// </summary>
/// <param name="this">扩展对象</param>
/// <returns>编码后的字符串</returns>
public static string EncryptByBase64(this string @this)
{
byte[] bytes = Encoding.UTF8.GetBytes(@this);
return Convert.ToBase64String(bytes);
}
/// <summary>
/// 使用 UTF8 编码格式,对字符串进行进行 Base64 方式解码(解密)
/// </summary>
/// <param name="this">扩展对象</param>
/// <returns>解码后的字符串</returns>
public static string DecryptByBase64(this string @this)
{
byte[] bytes = Convert.FromBase64String(@this);
return Encoding.UTF8.GetString(bytes);
}
请求地址:POST https://api.bimface.com/oauth2/token
说明:在调用其他API之前,必须先获取Access Token。Access Token的有效期为7天。
参数:
获取AccessToken的方法:
/// <summary>
/// 获取访问服务端其他API的令牌
/// </summary>
/// <param name="appKey">秘钥</param>
/// <param name="appSecret">密码</param>
/// <returns></returns>
public AccessTokenResponse GetAccessToken(string appKey, string appSecret)
{
//POST https://api.bimface.com/oauth2/token
string url = BimfaceConstants.API_HOST + "/oauth2/token"; BimFaceHttpHeaders headers = new BimFaceHttpHeaders();
headers.AddBasicAuthHeader(appKey, appSecret); try
{
AccessTokenResponse response;
HttpManager httpManager = new HttpManager(headers);
HttpResult httpResult = httpManager.Post(url);
if (httpResult.Status == HttpResult.STATUS_SUCCESS)
{
response = httpResult.Text.DeserializeJsonToObject<AccessTokenResponse>();
}
else
{
response = new AccessTokenResponse
{
Message = httpResult.RefText
};
} return response;
}
catch (Exception ex)
{
throw new Exception("获取 AccessToken 时发生异常!", ex);
}
}
在网页中测试上面的方法:
/// <summary>
/// 获取 AccessToken
/// </summary>
protected void btnGetAccessToken_Click(object sender, EventArgs e)
{
string token = string.Empty;
string appKey = ConfigUtility.GetAppSettingValue("BIMFACE_AppKey");
string appSecret = ConfigUtility.GetAppSettingValue("BIMFACE_AppSecret"); IBasicApi api = new BasicApi();
AccessTokenResponse response = api.GetAccessToken(appKey, appSecret);
if (response != null)
{
token = response.Data.Token;
}
}
在监视窗口中可以看到,接口调用返回了正确的结果:
在调试窗口中也可以看到正确的响应结果:
上述方法中调用到的 httpManger.Post(url)方法
/// <summary>
/// HTTP-POST方法,(不包含body数据)。
/// 发送 HTTP 请求并返回来自 Internet 资源的响应(HTML代码)
/// </summary>
/// <param name="url">请求目标URL</param>
/// <returns>HTTP-POST的响应结果</returns>
public HttpResult Post(string url)
{
return RequestString(url, null, WebRequestMethods.Http.Post, null);
}
/// <summary>
/// HTTP请求(包含文本的body数据)
/// </summary>
/// <param name="url">请求目标URL</param>
/// <param name="data">主体数据(普通文本或者JSON文本)。如果参数中有中文,请使用合适的编码方式进行编码,例如:gb2312或者utf-8</param>
/// <param name="method">请求的方法。请使用 WebRequestMethods.Http 的枚举值</param>
/// <param name="contentType"><see langword="Content-type" /> HTTP 标头的值。请使用 ContentType 类的常量来获取</param>
/// <returns></returns>
private HttpResult RequestString(string url, string data, string method, string contentType)
{
HttpResult httpResult = new HttpResult();
HttpWebRequest httpWebRequest = null; try
{
httpWebRequest = WebRequest.Create(url) as HttpWebRequest;
httpWebRequest.Method = method;
httpWebRequest.Headers = HeaderCollection;
httpWebRequest.CookieContainer = CookieContainer;
if (!string.IsNullOrWhiteSpace(contentType))
{
httpWebRequest.ContentType = contentType;// 此属性的值存储在WebHeaderCollection中。如果设置了WebHeaderCollection,则属性值将丢失。所以放置在Headers 属性之后设置
}
httpWebRequest.UserAgent = _userAgent;
httpWebRequest.AllowAutoRedirect = _allowAutoRedirect;
httpWebRequest.ServicePoint.Expect100Continue = false; if (data != null)
{
httpWebRequest.AllowWriteStreamBuffering = true;
using (Stream requestStream = httpWebRequest.GetRequestStream())
{
requestStream.Write(EncodingType.GetBytes(data), , data.Length);//将请求参数写入请求流中
requestStream.Flush();
}
} HttpWebResponse httpWebResponse = httpWebRequest.GetResponse() as HttpWebResponse;
if (httpWebResponse != null)
{
GetResponse(ref httpResult, httpWebResponse);
httpWebResponse.Close();
}
}
catch (WebException webException)
{
GetWebExceptionResponse(ref httpResult, webException);
}
catch (Exception ex)
{
GetExceptionResponse(ref httpResult, ex, method, contentType);
}
finally
{
if (httpWebRequest != null)
{
httpWebRequest.Abort();
}
} return httpResult;
}
请参考《C#开发BIMFACE系列15 服务端API之获取模型的View token》。
C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken的更多相关文章
- C#开发BIMFACE系列15 服务端API之获取模型的View token
系列目录 [已更新最新开发文章,点击查看详细] 在<C#开发BIMFACE系列3 服务端API之获取应用访问凭证AccessToken>中详细介绍了应用程序访问API的令牌凭证.我 ...
- C#开发BIMFACE系列7 服务端API之获取文件信息列表
系列目录 [已更新最新开发文章,点击查看详细] 本文详细介绍如何获取BIMFACE平台中所有上传过的文件信息列表. 请求地址:GET https://file.bimface.com/file ...
- C#开发BIMFACE系列8 服务端API之获取文件上传状态信息
系列目录 [已更新最新开发文章,点击查看详细] 在BIMFACE控制台上传文件,上传过程及结束后它会自动告诉你文件的上传状态,目前有三种状态:uploading,success,failure ...
- C#开发BIMFACE系列9 服务端API之获取应用支持的文件类型
系列目录 [已更新最新开发文章,点击查看详细] BIMFACE最核心能力之一是工程文件格式转换.无需安装插件,支持数十种工程文件格式在云端转换,完整保留原始文件信息.开发者将告别原始文件解析烦 ...
- C#开发BIMFACE系列10 服务端API之获取文件下载链接
系列目录 [已更新最新开发文章,点击查看详细] 通过BIMFACE控制台或者调用服务接口上传文件成功后,默认场景下需要下载该源文件,下载文件一般需要知道文件的下载链接即可.BIMACE平台提供 ...
- C#开发BIMFACE系列17 服务端API之获取模型数据2:获取构件材质列表
系列目录 [已更新最新开发文章,点击查看详细] 在上一篇<C#开发BIMFACE系列16 服务端API之获取模型数据1:查询满足条件的构件ID列表>中介绍了获取单文件(模型)的所有 ...
- C#开发BIMFACE系列18 服务端API之获取模型数据3:获取构件属性
系列目录 [已更新最新开发文章,点击查看详细] 本篇主要介绍如何获取单文件/模型下单个构建的属性信息. 请求地址:GET https://api.bimface.com/data/v2/fil ...
- C#开发BIMFACE系列19 服务端API之获取模型数据4:获取多个构件的共同属性
系列目录 [已更新最新开发文章,点击查看详细] 在前几篇博客中介绍了一个三维文件/模型包含多个构建,每个构建又是由多种材质组成,每个构建都有很多属性.不同的构建也有可能包含相同的属性. 上图中 ...
- C#开发BIMFACE系列21 服务端API之获取模型数据6:获取单模型的楼层信息
系列目录 [已更新最新开发文章,点击查看详细] 一个文件/模型中可能包含多个楼层信息,获取楼层信息对于前端页面的动态展示非常有帮助.本篇介绍获取一个文件/模型中可能包含多个楼层信息的详细方法. ...
随机推荐
- ioc和aop的区别
IoC,(Inverse of Control)控制反转,其包含两个内容:其一是控制,其二是反转.在程序中,被调用类的选择控制权从调用它的类中移除,转交给第三方裁决.这个第三方指的就是Spring的容 ...
- TestNG中group的用法
TestNG中的组可以从多个类中筛选组属性相同的方法执行. 比如有两个类A和B,A中有1个方法a属于组1,B中有1个方法b也属于组1,那么我们可以通过配置TestNG文件实现把这两个类中都属于1组的方 ...
- 原生应用使用cordova并与h5应用分离
个人原创地址:https://www.jianshu.com/p/1ad536e76640 1.需求与使用场景 打开一个新页面,要求能够加载本地zip格式的h5应用,该应用使用了某些原生能力:能够 ...
- DDMS 视图 Emulator Control 为灰色
Emulator Control 模拟发送短信时,发现所有选项均为灰色,如图所示: 解决方法: 确认以下四种情形或方法 已测试 Genymotion 模拟器和真机均不行,而Eclipse自带模拟器可以 ...
- Charles PC端和手机端抓取HTTP和HTTPS协议请求、HTTPS通用抓包规则
一:HTTP和HTTPS的区别 HTTP是超文本传输协议,被用在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,因此HTTP协议不适合传输一些敏感信息, ...
- 一道看似简单的go程序的深入分析
先上代码: func main() { var a [10]int for i := 0; i < 10; i++ { go func(i int) { for { a[i]++ } }(i) ...
- Vue2.0仿饿了么webapp单页面应用
Vue2.0仿饿了么webapp单页面应用 声明: 代码源于 黄轶老师在慕课网上的教学视频,我自己用vue2.0重写了该项目,喜欢的同学可以去支持老师的课程:http://coding.imooc.c ...
- python_0基础学习_day01
Python是一门动态解释型的强类型定义语言 一.变量 变量命名规则 由数字.字母.下划线组成 不能以数字开头 要具有描述性 要区分大小写 禁止使用python的关键字(在pycharm中关键字明明变 ...
- 03、Swagger2和Springmvc整合详细记录(爬坑记录)
时间 内容 备注 2018年6月18日 基本使用 spirngmvc整合swagger2 开始之前这个系列博文基本是,在项目的使用中一些模块的内容记录,但是后期逐渐优化,不单单是整合内容. swagg ...
- win7 python pdf2image入坑经历
Python开发菜鸟入坑 项目要求pdf转成图片,网上较多的方案对于windows极其不友好,wand,Pythonmagick(win下载地址:www.lfd.uci.edu/~gohlke/pyt ...