开发者社区 问答 正文

如何使用已经搭建好的应用服务器?

本文主要讲解OssDemo这样的移动APP如何使用应用服务器,以达到不需要在APP端存储AccessKeyId和AccessKeySecret也能向OSS上传的目的。

调用逻辑

  1. OssDemo在获取sts_server的地址后,发送请求。
  2. sts_server返回AccessKeyId、AccessKeySecret、SecurityToken、Expiration。
  3. OssDemo获取这些信息后,调用SDK,构建OssClient。


具体代码
生成一个EditText控件。 位置:
res/layout/content_main.xml
内容:
<EditText
     android:layout_height="wrap_content"
     android:layout_width="0dp"
     android:layout_weight="4"
     android:id="@+id/sts_server"
     android:text="@string/sts_server"
     />

  • 位置:
    res/values/strings
    内容:
    <string name="sts_server">http://oss-demo.aliyuncs.com/app-server/sts.php</string>


    从应用服务器获取STS相关参数的代码。 函数实现 OSSFederationToken getFederationToken()

    调用STS返回参数,初始化OssClient代码。 函数实现: //初始化一个OssService用来上传下载
    public OssService initOSS(String endpoint, String bucket, ImageDisplayer displayer) {
         //如果希望直接使用accessKey来访问的时候,可以直接使用OSSPlainTextAKSKCredentialProvider来鉴权。
         //OSSCredentialProvider credentialProvider = new OSSPlainTextAKSKCredentialProvider(accessKeyId, accessKeySecret);
         //使用自己的获取STSToken的类
         OSSCredentialProvider credentialProvider = new STSGetter(stsServer);

         ClientConfiguration conf = new ClientConfiguration();
         conf.setConnectionTimeout(15 * 1000); // 连接超时,默认15秒
         conf.setSocketTimeout(15 * 1000); // socket超时,默认15秒
         conf.setMaxConcurrentRequest(5); // 最大并发请求书,默认5个
         conf.setMaxErrorRetry(2); // 失败后最大重试次数,默认2次

         OSS oss = new OSSClient(getApplicationContext(), endpoint, credentialProvider, conf);

         return new OssService(oss, bucket, displayer);

    }


    展开
    收起
    青衫无名 2017-10-18 10:28:15 1988 分享 版权
    阿里云 AI 助理回答

    您提到的场景是关于如何在移动APP(如OssDemo)中安全地使用阿里云对象存储服务(OSS)上传文件,而不直接在APP端存储敏感的AccessKeyId和AccessKeySecret。这里采用的是STS(Security Token Service)临时凭证机制来实现这一目标。下面是对您描述流程的一个总结和补充说明:

    调用逻辑概述

    1. 获取STS Server地址:首先,在APP的配置中设置应用服务器(STS Server)的地址,这个地址是提供临时凭证的后端服务。
    2. 请求STS Server:OssDemo APP在需要上传文件时,向STS Server发送请求,请求中通常包含用户身份信息或特定的授权参数。
    3. 接收STS响应:STS Server验证请求后,返回一个包含有限时效性的AccessKeyIdAccessKeySecret以及SecurityToken等临时凭证信息。
    4. 构建OSSClient:APP利用这些临时凭证初始化OSSClient,然后通过这个客户端进行文件的上传操作。

    具体实现步骤

    1. 配置STS Server地址

    • 在APP的资源文件中(如res/layout/content_main.xml),定义了一个EditText控件用于展示或输入STS Server的地址。
    • res/values/strings.xml中,预设了STS Server的默认地址示例。

    2. 获取STS相关参数

    • 实现方法getFederationToken(),该方法负责向STS Server发起网络请求并解析返回的JSON数据,提取出STS凭证。

    3. 初始化OSSClient

    • initOSS()方法展示了如何使用从STS Server获取的凭证来初始化OSSClient。这里使用了自定义的STSGetter作为OSSCredentialProvider,它应该是一个实现了从STS Server获取凭证逻辑的类。
    • 还设置了ClientConfiguration以调整连接超时、socket超时、最大并发请求和重试次数等网络配置。

    安全性和优势

    • 增强安全性:因为AccessKey ID和AccessKey Secret不在APP端存储,即使APP被逆向工程分析,也不会泄露长期有效的密钥,降低了安全风险。
    • 权限控制:STS可以为每个请求生成具有特定权限和有效期的临时凭证,实现细粒度的权限控制,比如限制访问的Bucket、Object或操作类型。
    • 易于管理:通过STS Server集中管理权限分配,便于审计和动态调整策略,无需更新APP即可改变前端的访问权限。

    确保您的STS Server端实现遵循最小权限原则,并且对请求进行充分的身份验证和授权检查,以保证整个过程的安全性。

    有帮助
    无帮助
    AI 助理回答生成答案可能存在不准确,仅供参考
    0 条回答
    写回答
    取消 提交回答