1.7. SASL 身份验证机制

使用 简单的身份验证和安全层(SASL) 验证机制来定义使用 elytron 子系统验证与 JBoss EAP 服务器的连接的机制,以及用于连接到服务器的客户端。客户端可以是其他 JBoss EAP 实例,也可以是 Elytron 客户端。JBoss EAP 中的 SASL 身份验证机制也显著地用于 Elytron 与 Remoting subsystem 集成

1.7.1. 选择 SASL 身份验证机制

注意

虽然 JBoss EAP 和 Elytron 客户端可处理各种 SASL 身份验证机制,但必须确保支持以下机制。有关 SASL 验证机制的支持级别请查看此列表

您所使用的验证机制取决于您的环境和所需的身份验证方法。以下列表总结了一些支持的 SASL 验证机制的使用:

匿名
未经身份验证的客户端访问。
DIGEST-MD5
使用 HTTP 摘要身份验证作为 SASL 机制。
EXTERNAL
使用在请求上下文中表示的身份验证凭据。例如: IPsec 或 TLS 身份验证。
GS开始的机制
使用 Kerberos 进行身份验证。
JBOSS-LOCAL-USER
通过测试客户端具有与运行 JBoss EAP 服务器的本地用户相同的文件访问来提供身份验证。这对在同一计算机上运行的其他 JBoss EAP 实例有用。
OAUTHBEARER
使用 OAuth 提供的身份验证作为 SASL 机制。
PLAIN
纯文本用户名和密码身份验证。
SCRAM开头的机制
使用指定散列功能的 salt 挑战响应机制 (SCRAM)
-PLUS结尾的机制
表示特定身份验证机制的频道绑定变体。当底层连接使用 SSL/TLS 时,您应该使用这些变体。

有关各个 SASL 身份验证机制的更多信息,请参阅 IANA SASL 机制列表和单个机制 memos

1.7.2. 在服务器范围内配置 SASL 身份验证机制

在服务器端配置 SASL 验证机制是使用 SASL 身份验证工厂完成的。

需要两种配置:

  • 指定身份验证机制的 sasl-authentication-factory
  • 可配置-sasl-server-factory,用于聚合一个或多个 sasl-authentication-factory,并配置机制属性,并选择性地应用过滤器来启用或禁用某些验证机制。

以下示例演示了创建一个新的 configurable-sasl-server-factorysasl-authentication-factory,它使用 DIGEST-MD5 作为应用程序客户端的 SASL 身份验证机制。

/subsystem=elytron/configurable-sasl-server-factory=mySASLServerFactory:add(sasl-server-factory=elytron)

/subsystem=elytron/sasl-authentication-factory=mySASLAuthFactory:add(sasl-server-factory=mySASLServerFactory,security-domain=ApplicationDomain,mechanism-configurations=[{mechanism-name=DIGEST-MD5,mechanism-realm-configurations=[{realm-name=ApplicationRealm}]}])

1.7.3. 在客户端方中指定 SASL 身份验证机制

客户端使用的 SASL 验证机制通过 sasl-mechanism-selector 指定。您可以指定由客户端连接的服务器公开的任何支持的 SASL 身份验证机制。

sasl-mechanism-selector 在配置了身份验证的 Elytron 配置中定义:

  • elytron 子系统中,这是 authentication-configuration 的属性。例如:

    /subsystem=elytron/authentication-configuration=myAuthConfig:write-attribute(name=sasl-mechanism-selector,value="DIGEST-MD5")

    在配置 SSL 或使用 elytron的 TLS 中,可以看到将 身份验证sasl-mechanism-selector 搭配使用 的示例。

  • 对于 Elytron Client,它在客户端配置文件的 authentication- configuration s 配置元素下指定,通常称为 wildfly-config.xml。例如:

    <configuration>
      <authentication-client xmlns="urn:elytron:client:1.2">
        <authentication-rules>
          <rule use-configuration="default" />
        </authentication-rules>
        <authentication-configurations>
          <configuration name="default">
            <sasl-mechanism-selector selector="#ALL" />
          ...
          </configuration>
        </authentication-configurations>
      </authentication-client>
    </configuration>

有关使用 Elytron 客户端配置客户端身份验证的更多信息,请参阅如何配置身份管理

SASL-mechanism-selector Grammar

sasl-mechanism-selector 的选择器字符串有特定的 grammar。

在简单形式中,通过按顺序列出各个机制的名称(用空格分隔)来指定各个机制。例如,要将 DIGEST-MD5、SCRAM-SHA-1 和 SCRAM-SHA-256 指定为允许的验证机制,请使用以下字符串:DIGEST-MD5 SCRAM-SHA-1 SCRAM-SHA-256

对 grammar 的更多高级用法可使用以下特殊令牌:

  • #ALL :所有机制。
  • #FAMILY(NAME): Mechanisms 属于指定机制系列。例如,系列可以是 DIGEST、EAP、GS2、SCRAM 或 IEC-ISO-9798。
  • #PLUS: 使用频道绑定的机制。例如: SCRAM-SHA-XXX-PLUS 或 GS2-XXX-PLUS.
  • #MUTUAL: Mechanisms 以某种方式验证服务器,例如使服务器能够证明服务器知道该密码。#MUTUAL 包括 系列,如 #FAMILY(SCRAM)#FAMILY(GS2)
  • #HASH(ALGORITHM): 使用指定的哈希算法的机制机制。例如,算法可以是 MD5、SHA-1、SHA-256、SHA-384 或 SHA-512。

以上令牌和名称也可以用于以下操作和 predicates:

  • -: 表示禁止
  • !: 反转
  • &&: 和
  • ||: 或
  • ==: 等于
  • ?: : if if
  • #TLS: 在 TLS 处于活跃状态时是 true,否则为 false。

以下是 sasl-mechanism-selector 字符串及其含义的一些示例:

  • #TLS && !#MUTUAL : 当 TLS 处于活跃状态时,所有没有相互身份验证的机制。
  • #ALL -ANONYMOUS :除 ANONYMOOUS 以外的所有机制。
  • SCRAM-SHA-1 SCRAM-SHA-256 :按顺序添加这两种机制。
  • (SCRAM-SHA-1 || SCRAM-SHA-256) :根据供应商或服务器提供的顺序添加两种机制。
  • !#HASH(MD5):不使用 MD5 哈希算法的任何机制。
  • #FAMILY(DIGEST) :任何摘要机制。

1.7.4. 配置 SASL 身份验证机制属性

您可以在服务器端和客户端上配置身份验证机制属性。

  • 在服务器端,您可以在 configurable-sasl-server-factory 中定义身份验证机制属性。以下示例定义了 com.sun.security.sasl.digest.utf8 属性,值设为 false

    /subsystem=elytron/configurable-sasl-server-factory=mySASLServerFactory:map-put(name=properties,key=com.sun.security.sasl.digest.utf8,value=false)
  • 在客户端,您可以在客户端的身份验证配置中定义验证机制属性:

    • elytron 子系统中,定义 身份验证配置中的验证机制 属性。以下示例定义了 wildfly.sasl.local-user.quiet-auth 属性,值设为 true

      /subsystem=elytron/authentication-configuration=myAuthConfig:map-put(name=mechanism-properties,key=wildfly.sasl.local-user.quiet-auth,value=true)
    • 对于 Elytron 客户端,身份验证机制属性在客户端配置文件中的 authentication- configuration s 配置元素下指定,通常命名为 wildfly-config.xml。例如:

      ...
      <authentication-configurations>
        <configuration name="default">
          <sasl-mechanism-selector selector="#ALL" />
          <set-mechanism-properties>
            <property key="wildfly.sasl.local-user.quiet-auth" value="true" />
          </set-mechanism-properties>
          ...
        </configuration>
      </authentication-configurations>
      ...

您可以在 Java 文档 中看到标准 Java SASL 验证机制属性列表。其他 JBoss EAP 特定的 SASL 身份验证机制属性列在身份验证机制参考 中。