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

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提供了两种方法来维护对分发给外部用户的密钥的控制。最简单的方法就是在钥匙上写上有效期。一种更高级的方法是设置一个内部服务器,用于验证和验证密钥,并在创建密钥时将服务器URL提供给Bintray。每当用户试图访问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版,铂金会使用:

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画廊,Maven中心或任何其他存储库或下载中心。Bintray是唯一一个为您提供这种级别的控制访问您的私人资源。2022世界杯阿根廷预选赛赛程