用户认证
NiFi支持通过客户端证书,用户名/密码,Apache Knox或 OpenId Connect 进行用户身份验证。 用户名/密码验证由“登录身份提供程序”执行。登录身份提供程序是用于通过用户名/密码对用户进行身份验证的可插入机制。在nifi.properties文件中配置了要使用的登录身份提供程序。目前,NiFi为 轻量级目录访问协议(LDAP) 和 Kerberos 提供了带有登录身份提供程序选项的用户名/密码。 该nifi.login.identity.provider.configuration.file属性指定登录身份提供程序的配置文件。默认情况下,此属性设置为./conf/login-identity-providers.xml。 该nifi.security.user.login.identity.provider属性指示应使用哪个已配置的登录身份提供程序。默认情况下,未配置此属性,这意味着必须显式启用用户名/密码。 在OpenId Connect身份验证期间,NiFi会在返回NiFi之前将用户重定向到提供程序登录。然后NiFi将调用提供程序来获得用户身份。 在Apache Knox身份验证期间,NiFi将重定向用户以使用Apache Knox登录,然后再返回NiFi。NiFi将在身份验证过程中验证Apache Knox令牌。![049ca8a8c2daa8d7f583e33e4fac1b87.png](https://i-blog.csdnimg.cn/blog_migrate/14302538b7813f567ef8c20ad8ce9715.png)
除非将用户设置为nifi.security.allow.anonymous,否则用户无法使用NiFi的安全实例进行匿名身份验证。身份验证设置为true。在这种情况下,NiFi还必须配置有支持对匿名用户进行授权的授权器。目前,NiFi尚未随附任何支持此功能的授权者。这里有一个功能要求来帮助支持它(NIFI-2730)。
设置nifi.security.allow.anonymous.authentication时需要考虑三种情况。当用户直接调用没有尝试身份验证的端点时,nifi.security.allow.anonymous.authentication它将控制请求是通过身份验证还是被拒绝。其他两种情况是请求被代理时。这可以由NiFi节点(例如NiFi群集中的节点)代理,也可以由一个单独的代理代理一个匿名用户的请求。在这些代理方案中,nifi.security.allow.anonymous.authentication将控制请求是通过身份验证还是拒绝。在所有这三种情况下,如果对请求进行了身份验证,则随后将根据请求的资源对它进行常规授权。
![049ca8a8c2daa8d7f583e33e4fac1b87.png](https://i-blog.csdnimg.cn/blog_migrate/14302538b7813f567ef8c20ad8ce9715.png)
轻量级目录访问协议(LDAP)
以下是配置与目录服务器集成以验证用户身份的登录标识提供程序的示例和说明。
在nifi.properties中设置以下内容以启用LDAP用户名/密码身份验证:
nifi.security.user.login.identity.provider = ldap-provider
修改login-identity-providers.xml以启用ldap-provider。这是文件中提供的示例:
ldap-provider具有以下特性:
属性名称 | 描述 |
Authentication Strategy | 如何验证与LDAP服务器的连接。可能的值是ANONYMOUS,SIMPLE,LDAPS,或START_TLS。 |
Manager DN | 用于绑定到LDAP服务器以搜索用户的管理器的DN。 |
Manager Password | 用于绑定到LDAP服务器以搜索用户的管理器的密码。 |
TLS - Keystore | 使用LDAPS或START_TLS连接到LDAP时使用的密钥库的路径。 |
TLS - Keystore Password | 使用LDAPS或START_TLS连接到LDAP时使用的密钥库的密码。 |
TLS - Keystore Type | 使用LDAPS或START_TLS(即JKS或PKCS12)连接到LDAP时使用的密钥库的类型。 |
TLS - Truststore | 使用LDAPS或START_TLS连接到LDAP时使用的信任库的路径。 |
TLS - Truststore Password | 使用LDAPS或START_TLS连接到LDAP时使用的信任库的密码。 |
TLS - Truststore Type | 使用LDAPS或START_TLS(即JKS或PKCS12)连接到LDAP时使用的信任库的类型。 |
TLS - Client Auth | 使用LDAPS或START_TLS连接到LDAP时的客户端身份验证策略。可能的值是REQUIRED,WANT,NONE。 |
TLS - Protocol | 使用LDAPS或START_TLS连接到LDAP时使用的协议。(即TLS,TLSv1.1,TLSv1.2,等等)。 |
TLS - Shutdown Gracefully | 指定在关闭目标上下文之前是否应正常关闭TLS。默认为false。 |
Referral Strategy | 处理推荐的策略。可能的值是FOLLOW,IGNORE,THROW。 |
Connect Timeout | 连接超时的持续时间。(即10 secs)。 |
Read Timeout | 读取超时时间。(即10 secs)。 |
Url | LDAP服务器URL的以空格分隔的列表(即ldap://:)。 |
User Search Base | 用于搜索用户(即CN=Users,DC=example,DC=com)的基本DN 。 |
User Search Filter | 筛选以根据搜索用户User Search Base。(即sAMAccountName={0})。用户指定的名称将插入到“ {0}”中。 |
Identity Strategy | 识别用户的策略。可能的值为USE_DN和USE_USERNAME。如果缺少此属性,则默认功能是USE_DN,以保持向后兼容性。USE_DN尽可能使用用户条目的完整DN。USE_USERNAME将使用用户登录时使用的用户名。 |
Authentication Expiration | 用户身份验证有效的持续时间。如果用户从不注销,则将要求他们在此期限后重新登录。 |
![049ca8a8c2daa8d7f583e33e4fac1b87.png](https://i-blog.csdnimg.cn/blog_migrate/14302538b7813f567ef8c20ad8ce9715.png)
Kerberos
以下是配置与Kerberos密钥分发中心(KDC)集成以验证用户身份的登录身份提供程序的示例和说明。
在nifi.properties中设置以下内容以启用Kerberos用户名/密码身份验证:
nifi.security.user.login.identity.provider = kerberos-provider
修改login-identity-providers.xml以启用kerberos-provider。这是文件中提供的示例:
属性名称 | 描述 |
Default Realm | 用户输入不完整的用户主体(即NIFI.APACHE.ORG)时提供的默认领域。 |
Authentication Expiration | 用户身份验证有效的持续时间。如果用户从未登出,则将要求他们在此期限后重新登录。 |
另请参见Kerberos服务,以允许通过客户端Kerberos票证进行单点登录访问。
![049ca8a8c2daa8d7f583e33e4fac1b87.png](https://i-blog.csdnimg.cn/blog_migrate/14302538b7813f567ef8c20ad8ce9715.png)
为了使nifi.properties和login-identity-providers.xml的更改生效,需要重启NiFi。如果NiFi是群集的,则所有节点上的配置文件必须相同。
OpenId Connect
要通过OpenId Connect启用身份验证,必须在nifi.properties中配置以下属性。
属性名称 | 描述 |
nifi.security.user.oidc.discovery.url | 发现URL对所需的OpenId Connect Provider(http://openid.net/specs/openid-connect-discovery-1_0.html)。 |
nifi.security.user.oidc.connect.timeout | 与OpenId Connect提供程序进行通信时,连接超时。 |
nifi.security.user.oidc.read.timeout | 与OpenId Connect提供程序通信时读取超时。 |
nifi.security.user.oidc.client.id | 向OpenId Connect提供商注册后,NiFi的客户端ID。 |
nifi.security.user.oidc.client.secret | 向OpenId Connect提供商注册后,NiFi的客户端密码。 |
nifi.security.user.oidc.preferred.jwsalgorithm | 验证标识符的首选算法。如果该值为空,则默认情况下,RS256OpenId Connect Provider将根据规范支持该值。如果这个值HS256,HS384或者HS512,NiFi将尝试验证HMAC使用指定的客户端机密保护令牌。如果该值为none,则NiFi会尝试验证不安全/普通的令牌。此算法的其他值将尝试解析为RSA或EC算法,与通过发现URL找到的元数据中的jwks_uri提供的JSON Web密钥(JWK)结合使用。 |
nifi.security.user.oidc.additional.scopes | 逗号分隔的范围,除了OpenId和电子邮件外,还发送给OpenId连接提供程序。 |
nifi.security.user.oidc.claim.identifying.user | 识别要登录的用户的声明;默认是电子邮件。使用前可能需要通过nifi.security.user.oidc.additional.scopes。 |
Apache Knox
要通过Apache Knox启用身份验证,必须在nifi.properties中配置以下属性。
属性名称 | 描述 |
nifi.security.user.knox.url | Apache Knox登录页面的URL。 |
nifi.security.user.knox.publicKey | Apache Knox公钥的路径,该路径将用于验证HTTP Cookie中身份验证令牌的签名。 |
nifi.security.user.knox.cookieName | 成功登录后,Apache Knox将生成的HTTP Cookie的名称。 |
nifi.security.user.knox.audiences | 可选的。以逗号分隔的允许访问者列表。如果设置,令牌中的受众必须出现在此列表中。在令牌中填充的受众可以在Knox中配置。 |