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

“私有存储库”、“团队和组织”、“权限”……听起来像是提供安全私有下载所需的全部内容。嗯,不完全是。如果你的客户是一个Bintray用户,这些都是很好的功能。但如果她不是呢?好吧,还有签署的url.这些应该可以达到目的。只需签署文件并将URL发送给用户。但是,如果您想要与一组人共享整个存储库、包或版本,但需要给每个人不同的特权,该怎么办呢?有些只能查看或下载你的文件,但其他人应该可以删除你的文件或上传新文件。签名url不包括这种控制。它们适用于单个文件,但对于更细粒度的访问控制,则需要更复杂的特性。这就是权利和密钥发挥作用的地方。

你说的是“福利”?那些是什么?

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

但是如何解除权利?

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

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

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

  1. 创建密钥。您可以为您创建的每个密钥提供一个密码,或者Bintray可以为您生成一个。
  2. 创建授权在创建授权时,指定将哪些密钥应用于授权。

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

让我们看一个工作中的例子。

比如用户“ACMECorp”是否调用了私有存储库“极致”

的协议下包含多个协议版本“acmecorprod”不受公众访问保护的目录。

Bintray授权屏幕截图

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

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

curl -XPOST -uacmecorp: APIKEY " https://api.bintray.com/users/acmecorp/download_keys

“id”:“key1”,

“到期”:7956915742000

" existence_check ": {

:“url = https://callbacks.myci.org/username=:用户名,密码:密码”,

“cache_for_secs”:60


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

状态:201已创建

“用户名”:“key1@acmecorp”,
“密码”:“8 fdf84d2a814783f0fc2ce869b5e7f6ce9f286a0”

acmecorp对象的下载权限acmecorprod目录,同时分配key1这是刚刚创建的

curl -XPOST -uacmecorp:APIKEY " https://api.bintray.com/packages/acmecorp/ acme / acprod /津贴


“访问”:“r”,
“download_keys”(“key1”):

Bintray回应:

状态:201已创建

“id”:“7 f8d57b16c1046e38062ea3db91838ff77758eca”,
“访问”:“r”,
“download_keys”(“key1”):


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

例如,要下载acprod 1.0版,铂金会使用:

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

但现在如果acmecorp而且铂女士闹翻了。当这种情况发生时,acmecorp可以从他们的验证服务器上删除下载密钥,然后“嘿,瞬间”,铂金女士现在被锁在外面了acmecorp的存储库。

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

最初发表于https://blog.bintray.com/2015/06/09/enterprise-level-access-control/,作者shiranr