上云无忧 > 文档中心 > 百度智能云对象存储BOS STS临时认证原理
对象存储BOS
百度智能云对象存储BOS STS临时认证原理

文档简介:
Bce-bos-uploader 支持 STS(Security Token Service) 临时授权的方式。服务端生成一组具体特定操作权限、具有一定时效性的临时 AK/SK ,这组临时的 AK/SK 可以暴露给浏览器端直接使用。用户只需要将服务端返回的 AK/SK 及 SessionToken 设置为 bce-bos-uploader 对应的 bos-ak、bos-sk 和 uptoken 参数。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠



原理篇三:STS 临时认证

Bce-bos-uploader 支持 STS(Security Token Service) 临时授权的方式。服务端生成一组具体特定操作权限、具有一定时效性的临时 AK/SK ,这组临时的 AK/SK 可以暴露给浏览器端直接使用。用户只需要将服务端返回的 AK/SK 及 SessionToken 设置为 bce-bos-uploader 对应的 bos-ak、bos-sk 和 uptoken 参数。

关于 STS 方面的介绍请参考临时授权访问。使用流程:

  1. 配置应用服务器端 Nodejs 实现
  2. 获取临时 AK/SK/SessionToken
  3. 初始化 bce-bos-uploader 参数

应用服务器端 Nodejs 实现

var http = require('http');
    var url = require('url');
    var util = require('util');

    var STS = require('@baiducloud/sdk').STS;

    var kCredentials = {
        ak: '您的AK',
        sk: '您的SK'
    };

    function buildStsResponse() {
        var stsClient = new STS({
            credentials: kCredentials,
            region: 'bj'
        });
        return stsClient.getSessionToken(60 * 60 * 24, {
            accessControlList: [{
                service: 'bce:bos',
                resource: ['bce-javascript-sdk-demo-test'],
                region: '*',
                effect: 'Allow',
                permission: ['READ', 'WRITE']
            }]
        }).then(function (response) {
            var body = response.body;
            return {
                AccessKeyId: body.accessKeyId,
                SecretAccessKey: body.secretAccessKey,
                SessionToken: body.sessionToken,
                Expiration: body.expiration
            };
        });
    }

    http.createServer(function (req, res) {
        console.log(req.url);

        var query = url.parse(req.url, true).query;

        var promise = null;

        if (query.sts) {
            promise = buildStsResponse();
        }

        promise.then(function (payload) {
            res.writeHead(200, {
                'Content-Type': 'text/javascript; charset=utf-8',
                'Access-Control-Allow-Origin': '*'
            });

            if (query.callback) {
                res.end(util.format('%s(%s)', query.callback, JSON.stringify(payload)));
            }
            else {
                res.end(JSON.stringify(payload));
            }
        });
    }).listen(1337);
    console.log('Server running at http://0.0.0.0:1337/');

在服务器端,用与创建 bosClient 实例类似的方式创建一个 stsClient 实例。对于 stsClient 实例,主要有一个方法,那就是 getSessionToken 。这个方法接收两个参数,第一个参数是临时授权的有效期,以秒为单位;第二个单位是具体的权限控制,参见STS服务接口。

这个方法会异步访问 STS 授权服务器,返回一个 promise 对象。 STS 授权服务器会返回类似如下内容:


{   
        body: {         
            "accessKeyId": "d87a16e5ce1d47c1917b38ed03fbb329",
            "secretAccessKey": "e9b6f59ce06c45cdaaea2296111dab46", 
            "sessionToken": "MjUzZjQzNTY4OTE0NDRkNjg3N2E4YzJhZTc4YmU5ZDh8AAAAABwCAAB/
HfHDVV2bu5xUf6rApt2YdSLG6+21UTC62EHvIuiaamtuMQQKNkR9PU2NJGVbuWgBn8Ot0atk0HnWYQGgwgyew24HtbrX3GFiR/
cDymCowm0TI6OGq7k8pGuBiCczT8qZcarH7VdZBd1lkpYaXbtP7wQJqiochDXrswrCd+J/I2CeSQT6mJiMmvupUV06R89dWBL/
Vcu7JQpdYBk0d5cp2B+gdaHddBobevlBmKQw50/
oOykJIuho4Wn7FgOGPMPdod0Pf0s7lW/HgSnPOjZCgRl0pihs197rP3GWpnlJRyfdCY0g0GFG6T0/FsqDbxbi8lWzF1QRTmJzzh2
Tax8xoPFKGMbpntp
//vGP7oPYK1JoES34TjcdcZnLzIRnVIGaZAzmZMUhPEXE5RVX1w8jPEXMJJHSrFs3lJe13o9Dwg==",         
            "createTime": "2016-02-16T14:01:29Z",         
            "expiration": "2016-02-16T15:41:29Z",         
            "userId": "5e433c4a8fe74765a7ec6fc147e25c80"     
        } 
    }


服务器端需要把 accessKeyId、secretAccessKey、sessionToken 三个字段下发给浏览器端。

浏览器前端实现

前端使用 STS 临时授权机制时,只需要在各个服务初始化的时候把上面所说的参数 accessKeyId、secretAccessKey、sessionToken 引入就可以了。以 BOS 为例:

var bosConfig = {
         credentials: {
             ak: '{accessKeyId}', // STS服务器下发的临时ak
             sk: '{secretAccessKey}' // STS服务器下发的临时sk
         },
         sessionToken: '{sessionToken}',  // STS服务器下发的sessionToken
         endpoint: 'http://bj.bcebos.com'
     };
    var client = new baidubce.sdk.BosClient(bosConfig);



相似文档
  • 移动互联时代手机上传数据的场景随处可见,为了方便开发者聚焦于产品的业务逻辑,用户可以直接将文件存储到 BOS 上。 BOS 产品基于 STS 授权方式为用户提供了安全的上传和下载方式, BOS 还支持图片处理服务。BOS 具有成本低、支持海量存储和弹性扩展的特性,能帮助开发者更方便实现移动 APP 业务的开发。
  • 下载完 APP 并安装完成后可以直接通过应用服务器地址访问 BOS ,并进行图片处理。应用服务器地址是指搭建移动应用的后台服务器,默认开启的端口为8080。关于 BOS 的区域和 Bucket 设置都需要在应用服务器进行配置。
  • 上传图片到 BOS 过程中 APP、APP Server 和 BOS 的交互过程如下图所示: APP 上传图片时向 APP Server 发送获取上传方式请求。 APP Server 向 STS 服务器请求 BOS 使用 STS 访问的 AK/SK。
  • 示例代码以 Java 语言为例讲解美图 APP 的实现,代码分为 APP 客户端和应用服务器端两部分。 APP 端代码主要包括 BOSClient 初始化、从 APP Server 端获取 BOS 信息、及上传文件到 BOS 三个功能模块。
  • HTTP(HyperText Transfer Protocol),即超文本传输协议,是互联网上应用最为广泛的一种网络协议。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。通过HTTP或者HTTPS协议请求的资源由统一资源标识符(Uniform Resource Identifiers,URI)来标识。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部