使用密钥和授权的企业级访问控制

entitlements200x190

“私有存储库”、“团队和组织”、“权限”……,听起来你只需要提供安全的私有下载。嗯,不完全是。如果您的客户是Bintray的用户,那么这些都是非常适合您的功能。但如果她不是呢?然后是带签名的url。这些应该就可以了。只需签署文件并将URL发送给用户。但是,如果您希望与一组人共享整个存储库、包或版本,但需要给每个人不同的权限,该怎么办呢?有些只能查看或下载你的文件,但其他人应该可以删除你的文件或上传新文件。签名url不包含这种控制。 They are great for single files, but for more fine-grained access control, you need a more sophisticated feature. That’s where entitlements and keys come in.

“权利,”你说?那些是什么?

权利是你可以给任何人的特权,是的,任何人,不仅仅是Bintray用户,在你的私有存储库中的实体。“实体”是指任何可以包含文件的东西——整个存储库、存储库中的路径、特定包或特定版本。“特权”是指“rw”—下载、上传和删除,或“r”—仅下载。如果您没有注意到,实体和特权的组合为您提供了提供访问所需的任何粒度级别。

但是如何解锁权利呢?

我想你明白了。钥匙解锁权利。您生成一个密钥及其密码(或者Bintray可以自动为您生成一个)。您的用户必须提供用户名和密码才能启用解锁权限的密钥。这就是安全所在。只有同时拥有您提供给他们的密钥的用户名和密码的用户才能根据您创建的权限访问存储库实体。

那么这一切是如何运作的呢?

使用Bintray的REST API的两个简单步骤:

  1. 创建密钥。您可以为创建的每个密钥提供一个密码,或者Bintray可以为您生成一个密码。

  2. 创造福利。当您创建权利时,您可以指定要对其应用哪些密钥。

现在需要做的就是为用户提供其中一个密钥的用户名和密码。您的用户现在应用REST API来访问您的私有Bintray资源,同时包含您作为API调用参数提供的密钥和密码。Bintray将检查是否存在允许访问该资源的权限,以及该权限是否具有用户指定的与之关联的密钥。

让我们看一个实际的例子

假设用户“ACMECorp”有一个名为“acme”的私有存储库。

这个私有的repo包含“acmecorprod”目录下的几个版本的acprod,这些版本不受公众访问的保护。

ACMECorp希望授权“白金客户”下载不同的版本。不用说,"铂金女士"没有Bintray账户。

首先,ACMECorp需要创建一个密钥。Bintray提供了两种方法来维护对分发给外部用户的密钥的控制。最简单的方法就是在密钥上写上有效期。更高级的方法是设置用于验证和验证密钥的内部服务器,并在创建密钥时向Bintray提供服务器URL。每次用户尝试访问ACMECorp的存储库时,Bintray都会使用ACMECorp在创建密钥时提供的URL验证密钥。由于ACMECorp对其密钥非常小心,我们假设他们想用自己的系统验证密钥:

curl -XPOST -uacmecorp:APIKEY " https://api.bintray.com/users/acmecorp/download_keys {" id ": " key1″," expiry ": 7956915742000 " existence_check ":{" url ": " https://callbacks.myci.org/username=:username,password=:password ", " cache_for_secs ": 60}}

Bintray创建一个密钥及其关联的密码

状态:201已创建{"username": "key1@acmecorp", "password": "8fdf84d2a814783f0fc2ce869b5e7f6ce9f286a0"}

ACMECorp现在创建一个授权,该授权为acmecorprod目录提供下载特权,同时分配刚刚创建的key1

curl -XPOST -uacmecorp:APIKEY "https://api.bintray.com/packages/acmecorp/acme/acprod/entitlements {"access": "r", "download_keys": ["key1"]}

Bintray回应:

状态:201已创建
{
“id”:“7 f8d57b16c1046e38062ea3db91838ff77758eca”,
“访问”:“r”,
“download_keys”(“key1”):
}

基本上就是这样。ACMECorp现在只需向Platinum女士提供用户名“key1@acmecorp”及其密码,她就可以使用它们访问ACMECorp存储库中的acmecorprod目录。

例如,要下载acprod 1.0版本,Platinum女士将使用:

curl -XGET "https://dl.bintray.com/acmecorp/acme/acmecorprod/1.0/acprod.exe" -ukey1@acmecorp -p " 8fdf84d2a814783f0fc2ce869b5e7f6ce9f286a0 "

但如果ACMECorp和铂金女士闹翻了怎么办。当这种情况发生时,ACMECorp可以从他们的验证服务器上删除下载密钥,然后“嘿,快”,白金女士现在被锁定在ACMECorp的存储库之外。

试着这样做在Docker Hub上, RubyGems.org, NuGet Gallery, Maven Central或任何其他存储库或下载中心。Bintray是唯一一个为您提供这种级别的私有资源访问控制的工具。2022世界杯阿根廷预选赛赛程