首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >限制对单个桶的访问令牌

限制对单个桶的访问令牌
EN

Stack Overflow用户
提问于 2014-06-26 12:00:15
回答 1查看 1.5K关注 0票数 2

我有一个服务器应用程序,可以在中存储用户文件。客户端从服务器请求文件,并返回指向中文件的URL。服务器还返回一个访问令牌,以便客户机可以下载该文件。

我发现我的服务器正在生成的访问令牌可以用于下载我存储在中的任何文件。我倾向于生成一个只对单个桶有效的访问令牌。这有可能吗?这是限制客户端访问存储的正确方法吗?

下面是生成访问令牌的方法:

代码语言:javascript
复制
private Credential authorize (Set<String> scopes)
{
    GoogleCredential credential = null;

    try
    {
        if (m_HttpTransport == null)
        {
            m_HttpTransport = GoogleNetHttpTransport.newTrustedTransport ();
        }

        File p12File = new File ("key.p12");

        credential = new GoogleCredential.Builder ()
                           .setTransport (m_HttpTransport)
                           .setJsonFactory (JacksonFactory.getDefaultInstance ())
                           .setServiceAccountId ("foo@developer.gserviceaccount.com")
                           .setServiceAccountScopes (scopes)
                           .setServiceAccountPrivateKeyFromP12File (p12File).build ();
    }
    catch (Exception ex)
    {
        m_Logger.log (Level.SEVERE, null, ex);
    }

    return credential;
}

private String retrieveReadOnlyAccessToken ()
        throws IOException
{
    Set<String> scopes = new HashSet<> ();

    scopes.add (StorageScopes.DEVSTORAGE_READ_ONLY);

    Credential credential = authorize (scopes);

    credential.refreshToken ();

    return credential.getAccessToken ();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-29 17:30:10

对于您的用例(对资源的有限访问),我建议使用签名的URL。请参阅文档这里

解决此用例的典型方法是向用户提供一个签名的URL,允许用户在有限的时间内访问该资源。任何知道URL的人都可以在有限的时间内访问该资源。

在签名URL的情况下,您的用户甚至不必拥有一个Google帐户来读取/写/删除GCS资源,访问控制完全由您的应用程序管理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24429968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档