有问题吗?想要报告问题?联系JFrog支持

跳到元数据的末尾
进入元数据的开始

概述

从5.0版本开始,Artifactory提供了访问令牌作为一种新的灵活的身份验证手段,具有以前无法提供的一系列功能:

  • Cross-instance身份验证
    访问令牌可以用于身份验证,不仅可以用于创建它们的Artifactory实例或集群,还可以用于属于同一个“信任圈”(如下所述)的其他实例和集群。
  • 用户和非用户认证
    对Artifactory用户进行身份验证的理由很清楚,但是也可以将访问令牌分配给非用户实体,例如CI服务器作业。

  • 基于时间的访问控制
    访问令牌有一个有效期,因此您可以控制授予访问权限的时间段。但是,您也可以通过使接收用户可刷新来将该控制委托给接收用户

  • 灵活的范围
    通过通过将Groups分配给令牌,您可以控制它们提供的访问级别

为了支持这些功能,一个访问令牌具有以下属性:

主题
与此访问令牌相关联的用户。如果指定的用户不存在,Artifactory将创建一个相应的瞬时用户。Artifactory管理员可以将令牌分配给任何主题(用户);创建令牌的非管理员用户只能为自己分配令牌。
发行人
创建访问令牌所在集群的标识符
范围
令牌提供的访问范围。默认情况下总是提供对REST API的访问;此外,还可以指定令牌提供的组成员关系。Artifactory管理员可以设置任何范围;非admin用户只能将作用域设置为所属组的子集。
到期
从创建到令牌过期的一段时间。Artifactory管理员可以设置任何有效期;非admin用户不能更改过期时间,因此他们创建的令牌将在默认的60分钟后过期。
可刷新的
是否可以刷新令牌以继续使用
观众
可在其上使用令牌的Artifactory实例或集群集,由它们的Service id标识。Service ID是Artifactory实例或集群内部生成的唯一标识符,通过获取服务IDREST API端点。

访问令牌完全通过REST API如下所述。

页面内容

访问服务

从Artifactory 5.4版本开始,访问令牌在一个名为access的新服务下进行管理,该服务在一个单独的WAR文件中实现,access.war.此更改对访问令牌的使用方式没有影响,但是,Artifactory安装文件结构现在还包括在$ ARTIFACTORY_HOME / webapps文件夹中。Artifactory通过HTTP与Access服务通信,并假设它使用“Access”的上下文路径运行在同一个Tomcat中

新实现向后兼容旧令牌,因此您仍然可以使用旧版本生成的令牌在新版本中进行身份验证,但是不能使用新版本生成的令牌在旧版本中进行身份验证。

断变化:注意,该更改不向后兼容,因此从5.4及以上版本创建的令牌不能用于5.4之前版本的身份验证。这可能会影响信任圈,其中一些实例运行5.4以下的版本,而另一些实例运行5.4及以上版本。

访问业务日志

Artifactory访问服务使用Logback框架管理日志。活动根据类型记录在三个不同的日志文件中,这些文件可以在ARTIFACTORY_HOME /访问日志文件夹中。

日志文件如下:

access.log
这是包含Access服务器活动数据的主要Access服务日志文件
request.log
传入请求的HTTP流量信息。其中大部分来自Artifactory
audit.log
服务执行的操作的审计。目前只记录成功的操作(例如,创建令牌,刷新令牌或撤销令牌)

由于Access服务运行在与Artifactory相同的Tomcat下,因此它的日志(catalina.out。localhost等)包含Artifactory和Access的条目。

配置日志记录

Access服务的日志记录在美元/ etc / logback.xml ARTIFACTORY_HOME /访问文件。


Cross-Instance身份验证

访问令牌通过在所有参与实例之间共享公共证书而建立的“信任圈”支持跨实例身份验证。由Artifactory管理员负责确保所有参与的实例都配备了证书。这意味着任何实例都可以生成一个令牌,与信任圈内的任何其他实例一起使用。当Artifactory实例接收到由签名令牌验证的REST API调用时,它将使用包含公钥的根证书来验证其颁发者是否在信任圈中。即使在运行时,Artifactory也能识别添加或删除的任何新证书。

限制

只有过期且可刷新的令牌才能在与创建它的实例不同的实例上用于身份验证。

只有发出令牌的实例才能刷新令牌。

跨实例验证

设置私钥和根证书

由Artifactory管理员负责确保所有参与的实例都配备了公钥(根证书)。

Access监视包含受信任公钥的目录nio WatchService并在需要验证令牌时重新加载键。

所要做的就是把钥匙放在下面美元ARTIFACTORY_HOME /访问/ etc /键/信任


访问主页布局(新条目以粗体显示):

(ACCESS_HOME美元)

|
+,等/
+ -键/
| - - - root
|——private.key
+--信任/
|--[名字].crt
|--[name2] .crt
|--[name3] .crt
+--...

Artifactory哈

对于Artifactory HA安装,根证书应该放在美元ARTIFACTORY_HOME /访问/ etc /键/信任在集群的每个节点中。

这一过程通常取决于您是引导新实例还是为现有实例设置跨实例身份验证(直到版本5.9.0,在该版本中概述了上述说明)。

下面的部分描述了每种情况的步骤。

新实例

Artifactory Pro或OSS
  1. 启动信任范围内的第一个Artifactory实例(或HA安装的集群节点)。生成私钥和根证书,并保存在$ ARTIFACTORY_HOME /访问/ etc /钥匙
  2. 将私钥和根证书文件复制到文件系统上所有其他实例/节点都可以访问的位置。

  3. 在引导之前,为每个其他实例/节点创建美元ARTIFACTORY_HOME / etc /访问文件夹并在其中创建一个名为access.bootstrap.config其内容如下:

    关键= /道路/ /私人。关键的crt = /道路/ / root
  4. 当每个实例/节点启动时,如果ARTIFACTORY_HOME /访问/ etc /美元access.bootstrap.config文件存在,则将私钥和根证书从指定位置复制到下的服务器主目录$ ARTIFACTORY_HOME /访问/ etc /钥匙。
Artifactory哈

对于Artifactory HA安装,可以找到私钥和根证书$ ARTIFACTORY_HOME /访问/ etc /钥匙主节点。

现有的实例

键旋转将使任何发出的访问令牌无效

下面的过程将创建新的密钥对,从而使当前实例发出的任何现有访问令牌无效。

先做这个!

将私钥和根证书文件从您希望当前实例加入其信任圈的Artifactory实例复制到文件系统上当前实例可访问的位置。

在引导实例之前:

对于Artifactory 5.6.0以下版本:

  1. 删除现有私钥和根证书文件(private.key而且crt)从美元ARTIFACTORY_HOME / etc /访问文件夹中。
  2. 创建ARTIFACTORY_HOME /访问/ etc /美元access.bootstrap.config其内容如下:

    关键= /道路/ /私人。关键的crt = /道路/ / root
  3. 添加以下JVM属性(在JAVA_OPTIONS环境变量)到ARTIFACTORY_HOME美元/bin/artifactory。默认值:

    -Djfrog.access.force.replace.existing.root.keys = true
  4. 启动实例准备添加到您的信任圈并验证artifact .log文件显示以下条目:

    ******************************************************************* *** 迫使替代根私钥和证书  *** *******************************************************************
  5. 删除添加到的JVM属性ARTIFACTORY_HOME美元/bin/artifactory.default在第三步。


    对于5.6.0到5.9.0之间的Artifactory版本
  1. 删除现有私钥和根证书文件(private.key而且crt)从美元ARTIFACTORY_HOME / etc /访问文件夹中。
  2. 创建ARTIFACTORY_HOME /访问/ etc /美元access.bootstrap.config其内容如下:

    关键= /道路/ /私人。关键的crt = /道路/ / root
  3. 保存配置描述符从Artifactory UI或使用常规配置并将其保存在ARTIFACTORY_HOME / etc /美元artifactory.config.import.xml。
  4. 完全移除adminToken标签和它的值从上面保存的配置描述符文件。

  5. 验证上面文件的权限设置是否正确重启Artifactory

  6. 验证美元ARTIFACTORY_HOME /日志/ artifactory.log或/和$ ARTIFACTORY_HOME / /日志/ access.log访问文件显示如下条目:

    **************************************************************** *** 根私人的跳过验证指纹  *** **************************************************************** *** 私钥指纹将会被覆盖掉  **************** ****************************************************************

    $ ARTIFACTORY_HOME / /日志/ access.log访问会显示下面的条目吗

    [ACCESS BOOTSTRAP]启动JFrog ACCESS BOOTSTRAP…[ACCESS BOOTSTRAP]复制BOOTSTRAP配置提供的私钥和根证书文件。[ACCESS BOOTSTRAP]正在更新服务器'5d2f9c44-6bff-4723-80e2-45835965d76c'私钥指纹到:2212e73eeb3b4ee604f80045d0028473293f54ba05851ea6a6cbb34fecad2a2b [ACCESS BOOTSTRAP] JFrog ACCESS BOOTSTRAP完成。

已存在HA集群中的对端传播

对于高可用性集群,私有。键和根。键会自动传播,并根据在集群共享数据库中保存的内容进行更新。

这些步骤应该被设置为主节点,它还将在其节点中打印以下日志条目美元ARTIFACTORY_HOME /日志/ artifactory.log

成功将更改发布到另一个访问peer [http://:/access]


使用令牌

有几种方法可以使用访问令牌进行身份验证。

基本身份验证

可以使用访问令牌代替密码进行基本身份验证。当您需要一个只支持基本身份验证的客户端(比如某些依赖管理器)来访问Artifactory时,这可能很有用。在这种情况下,使用创建令牌时提供的相同用户名访问Artifactory是很重要的- d“用户名= <用户名>”).

例如,要使用访问令牌作为ping Artifactory的密码,您可以使用:

curl -u: http://ARTIFACTORY_URL/api/system/ping

授权标头

访问令牌可在授权标头中用作承载令牌。这对于使用Artifactory而不是凭据验证CI服务器特别有用,因为如果在中提供了组,则不需要在Artifactory中定义用户- d”member-of-groups: <集团> "在该Artifactory实例中配置。因此,不需要为需要访问Artifactory的不同自动化工具管理虚构的用户。

例如,使用一个访问令牌作为承载令牌来ping Artifactory,你可以使用:

curl -H"授权:承载" http://ARTIFACTORY_URL/api/system/ping

支持对不存在的用户进行认证

访问令牌的最大优点之一是,您不必在Artifactory中创建用户来使用它们。在创建令牌时,您可以指定一个不存在的用户名,Artifactory将创建一个临时用户,该用户只在令牌有效时存在。这对于访问不同的工具很有用,比如CI服务器协调构建,而不必管理假用户帐户。这种方法也更安全,因为您可以为外部工具运行的每个“作业”分配一个新的令牌。

仅限Artifactory管理员

注意,此特性仅适用于Artifactory管理员,因为非管理员用户只能以自己作为Subject创建令牌。


生成到期令牌

过期令牌不能撤销

具有指定到期期限的令牌将在达到其到期期限时自动失效。

在生成token时,可以通过设置token的过期时间来限制token的有效期。如果设置了,令牌将一直有效,直到过期时间过去。
您可以通过将有效期设置为零来将令牌设置为不可过期的,在这种情况下,令牌将无限期有效,直到主动撤销为止。

此值通过使用“生成令牌时的&expires_in="参数(参见下面REST API部分中的示例)。如果不使用,默认值将是3600,这意味着您的令牌将在一小时内有效。

仅限Artifactory管理员

注意,只有Artifactory管理员可以将令牌的有效期更改为任何值。非admin用户只能将令牌有效期设置为等于或小于默认值3600秒。

生成可刷新令牌

如上所述,可以通过设置令牌的过期时间来限制令牌的有效期。为了允许在令牌过期后扩展令牌的访问权限,您可以提供一个刷新令牌,它将生成一个具有与原始令牌相同权限的新令牌。这将令牌管理从其发行者手中解放出来,并将其委托给接收令牌的用户。

谁能刷新?

只有发出可刷新令牌的实例(或HA集群)才能实际刷新令牌。

限制

创建了令牌的外部用户仍然能够刷新令牌,即使他已从外部身份验证服务器中删除。


生成管理令牌

通常,令牌的范围是通过指定令牌所在的组来定义的,但是,Artifactory管理员也可以使用管理权限创建令牌。这对于JFrog Mission Control和JFrog Xray来说很有用,因为这两个互补的应用程序都需要管理权限才能与Artifactory无缝地工作。有了这个功能,当Mission Control或Xray连接到Artifactory实例时,他们可以创建一个管理令牌并使用它进行身份验证,而不是使用带有用户名和密码的基本身份验证。


撤销令牌

任何可刷新的或不可过期的令牌都可以被撤销,但只能由发出令牌的实例(或集群)撤销。具有指定到期期限的令牌将在达到其到期期限时自动失效。不可过期的记号(expires_in参数设置为0)必须主动撤销以终止其使用。如上所述,要支持跨站点身份验证,令牌必须既可过期又可刷新。注意,这种令牌不能被撤销。终止其使用的唯一方法是撤销其刷新令牌,这样它的使用将在下一次过期时终止。

“撤销”跨实例身份验证令牌

要终止用于跨实例身份验证的令牌的使用,需要撤销其刷新令牌。


REST API

访问令牌的所有管理都是通过REST API通过下面描述的端点完成的。

创建令牌

创建访问令牌。

有关详细信息,请参阅REST API文档创建令牌

刷新令牌

刷新访问令牌以延长其有效期。如果只提供访问令牌和刷新令牌(不提供其他参数),则使用此对进行身份验证。如果提供了用户名或任何其他参数,则请求必须通过授予管理权限的令牌进行身份验证。

有关详细信息,请参阅REST API文档刷新令牌

撤销令牌

撤销访问令牌

有关详细信息,请参阅REST API文档撤销令牌

获取服务ID

提供Artifactory实例或集群的服务ID

有关详细信息,请参阅REST API文档获取服务ID


用户界面

管理用户可以查看所有已创建的访问令牌的详细信息管理模块下安全|访问令牌

访问令牌页面允许您查看,撤销,搜索主题和过滤器只查看到期令牌。

额外的功能,如创建新的令牌,是通过REST API

访问令牌界面


故障排除

症状

在启动过程中,Artifactory启动失败,并抛出一个错误:

illegalstateexception:提供的私钥与最新私钥指纹不匹配。

导致

Artifactory尝试验证和比较驻留在Artifactory数据库和本地文件系统中的访问密钥指纹。如果密钥不匹配,将抛出上述异常以及不匹配的指纹id。

这可能发生在试图升级/安装Artifactory期间。
决议

此问题的解决方案取决于您正在运行的版本。

对于Artifactory 5.6.0以下版本:

按照以下步骤,确保您信任的圈子中的所有实例都具有相同的私钥和根证书:

键旋转将使任何发出的访问令牌无效

下面的过程将创建新的密钥对,从而使任何现有的访问令牌无效。

    1. 添加以下JVM属性(在JAVA_OPTIONS环境变量)到ARTIFACTORY_HOME美元/bin/artifactory。默认($ ARTIFACTORY_HOME / etc /违约服务安装):

      -Djfrog.access.force.replace.existing.root.keys = true
    2. 启动新实例并验证美元ARTIFACTORY_HOME /日志/ artifactory.log$ ARTIFACTORY_HOME / /日志/ access.log访问文件显示如下条目:

      ******************************************************************* *** 迫使替代根私钥和证书  *** *******************************************************************
    3. 删除添加到的JVM属性ARTIFACTORY_HOME美元/bin/artifactory.default在步骤a中。

对于Artifactory 5.6.0及以上版本:

按照以下步骤,确保您信任的圈子中的所有实例都具有相同的私钥和根证书:

键旋转将使任何发出的访问令牌无效

下面的过程将创建新的密钥对,从而使任何现有的访问令牌无效。

    1. 创建一个名为bootstrap.reset_root_keysARTIFACTORY_HOME /访问/ etc /美元
    2. 在一般的Artifactory配置文件中,ARTIFACTORY_HOME / etc /美元artifactory.config.import.xml,完全移除adminToken标签及其内容。
    3. 为了导入这些更改,将配置文件重命名为artifactory.config.import.xml并重新启动Artifactory。
    4. 验证美元ARTIFACTORY_HOME /日志/ artifactory.log$ ARTIFACTORY_HOME / /日志/ access.log访问文件显示如下条目:
    **************************************************************** *** 根私人的跳过验证指纹  *** **************************************************************** *** 私钥指纹将会被覆盖掉  **************** ****************************************************************
症状 现象描述按照正确的升级流程升级后,Artifactory集群HA节点无法正常启动
导致 在Artifactory 5.4中,访问令牌的实现从Artifactory WAR文件中取出,并移动到一个单独的WAR文件中。结果,你的Tomcatserver.xml文件需要修改。
决议

确保你的$ARTIFACTORY_HOME/tomcat / conf / server.xml文件配置了2个启动/停止线程,如下例所示(参见startStopThreads = " 2 "/ >:

<服务器端口="8015" shutdown=" shutdown "> <服务名称="Catalina"> <连接器端口="8081"/>  <连接器端口="8019"协议="AJP/1.3"/> <引擎名称="Catalina" defaultHost="localhost"> <主机名称="localhost" appBase="webapps" startStopThreads="2"/>   
症状 使用访问令牌进行身份验证时出现“令牌验证失败".
导致 在Artifactory 5.4中改变了访问令牌的实现。该更改是向后兼容的,因此使用早期版本的Artifactory创建的令牌可以在新版本中进行身份验证,但反之则不然。在5.4或更高版本中创建的令牌无法通过5.4之前的版本进行身份验证。
决议 要么升级旧的Artifactory实例,要么确保只使用旧实例创建访问令牌。
  • 没有标签