Hello Lourdes

It is extremely hard to find someone to respond meaningfully to questions
related to a NiFi release that is so many years back.  There have been
thousands of JIRAs to fix/improve/change the way such components behave.
If you can please get updated to something more recent I think you'll find
getting help from the community easier.

Thanks

On Mon, Nov 6, 2023 at 6:58 AM Lourdes Ursela Carmen Kuskanto
<lourdes.u.c.kuska...@astrapay.com.invalid> wrote:

> Dear NiFi Developer Team,
>
> I want to enable SSO login in NiFi version 1.4 in my Compute Engine in GCP
> using OIDC. I want to allowed all user from my Azure Active Directory group
> that i have made before to be able to login to NiFi using their account as
> registered. But i can't seem to make it work.
>
> I have followed this step :
> https://github.com/benkelly/NiFi-Authentication-with-Azure-Active-Directory-Setup-Guide
>
> This is my configuration:
>
> nifi.properties
>
> # Core Properties #
> nifi.flow.configuration.file=./conf/flow.xml.gz
> nifi.flow.configuration.archive.enabled=true
> nifi.flow.configuration.archive.dir=./conf/archive/
> nifi.flow.configuration.archive.max.time=30 days
> nifi.flow.configuration.archive.max.storage=500 MB
> nifi.flow.configuration.archive.max.count=
> nifi.flowcontroller.autoResumeState=true
> nifi.flowcontroller.graceful.shutdown.period=10 sec
> nifi.flowservice.writedelay.interval=500 ms
> nifi.administrative.yield.duration=30 sec
> # If a component has no work to do (is "bored"), how long should we wait
> before checking again for work?
> nifi.bored.yield.duration=10 millis
> nifi.queue.backpressure.count=10000
> nifi.queue.backpressure.size=1 GB
>
> nifi.authorizer.configuration.file=./conf/authorizers.xml
>
> nifi.login.identity.provider.configuration.file=./conf/login-identity-providers.xml
> nifi.templates.directory=./conf/templates
> nifi.ui.banner.text=
> nifi.ui.autorefresh.interval=30 sec
> nifi.nar.library.directory=./lib
> nifi.nar.library.autoload.directory=./extensions
> nifi.nar.working.directory=./work/nar/
> nifi.documentation.working.directory=./work/docs/components
>
> ####################
> # State Management #
> ####################
> nifi.state.management.configuration.file=./conf/state-management.xml
> # The ID of the local state provider
> nifi.state.management.provider.local=local-provider
> # The ID of the cluster-wide state provider. This will be ignored if NiFi
> is not clustered but must be populat>
> nifi.state.management.provider.cluster=zk-provider
> # Specifies whether or not this instance of NiFi should run an embedded
> ZooKeeper server
> nifi.state.management.embedded.zookeeper.start=false
> # Properties file that provides the ZooKeeper properties to use if
> <nifi.state.management.embedded.zookeeper.s>
>
> nifi.state.management.embedded.zookeeper.properties=./conf/zookeeper.properties
>
>
> # H2 Settings
> nifi.database.directory=./database_repository
> nifi.h2.url.append=;LOCK_TIMEOUT=25000;WRITE_DELAY=0;AUTO_SERVER=FALSE
>
> # FlowFile Repository
>
> nifi.flowfile.repository.implementation=org.apache.nifi.controller.repository.WriteAheadFlowFileRepository
>
> nifi.flowfile.repository.wal.implementation=org.apache.nifi.wali.SequentialAccessWriteAheadLog
> nifi.flowfile.repository.directory=./flowfile_repository
> nifi.flowfile.repository.checkpoint.interval=20 secs
> nifi.flowfile.repository.always.sync=false
> nifi.flowfile.repository.encryption.key.provider.implementation=
> nifi.flowfile.repository.encryption.key.provider.location=
> nifi.flowfile.repository.encryption.key.provider.password=
> nifi.flowfile.repository.encryption.key.id=
> nifi.flowfile.repository.encryption.key=
> nifi.flowfile.repository.retain.orphaned.flowfiles=true
>
>
> nifi.swap.manager.implementation=org.apache.nifi.controller.FileSystemSwapManager
> nifi.queue.swap.threshold=20000
>
> # Content Repository
>
> nifi.content.repository.implementation=org.apache.nifi.controller.repository.FileSystemRepository
> nifi.content.claim.max.appendable.size=1 MB
> nifi.content.repository.directory.default=./content_repository
> nifi.content.repository.archive.max.retention.period=7 days
> nifi.content.repository.archive.max.usage.percentage=50%
> nifi.content.repository.archive.enabled=true
> nifi.content.repository.always.sync=false
> nifi.content.viewer.url=../nifi-content-viewer/
> nifi.content.repository.encryption.key.provider.implementation=
> nifi.content.repository.encryption.key.provider.location=
> nifi.content.repository.encryption.key.provider.password=
> nifi.content.repository.encryption.key.id=
> nifi.content.repository.encryption.key=
>
> # Provenance Repository Properties
>
> nifi.provenance.repository.implementation=org.apache.nifi.provenance.WriteAheadProvenanceRepository
> nifi.provenance.repository.encryption.key.provider.implementation=
> nifi.provenance.repository.encryption.key.provider.location=
> nifi.provenance.repository.encryption.key.provider.password=
> nifi.provenance.repository.encryption.key.id=
> nifi.provenance.repository.encryption.key=
>
> # Persistent Provenance Repository Properties
> nifi.provenance.repository.directory.default=./provenance_repository
> nifi.provenance.repository.max.storage.time=30 days
> nifi.provenance.repository.max.storage.size=10 GB
> nifi.provenance.repository.rollover.time=10 mins
> nifi.provenance.repository.rollover.size=100 MB
> nifi.provenance.repository.query.threads=2
> nifi.provenance.repository.index.threads=2
> nifi.provenance.repository.compress.on.rollover=true
> nifi.provenance.repository.always.sync=false
>
> # Comma-separated list of fields. Fields that are not indexed will not be
> searchable. Valid fields are:
> # EventType, FlowFileUUID, Filename, TransitURI, ProcessorID,
> AlternateIdentifierURI, Relationship, Details
> nifi.provenance.repository.indexed.fields=EventType, FlowFileUUID,
> Filename, ProcessorID, Relationship
> # FlowFile Attributes that should be indexed and made searchable.  Some
> examples to consider are filename, uui>
> nifi.provenance.repository.indexed.attributes=
> # Large values for the shard size will result in more Java heap usage when
> searching the Provenance Repository
> # but should provide better performance
> nifi.provenance.repository.index.shard.size=500 MB
> # Indicates the maximum length that a FlowFile attribute can be when
> retrieving a Provenance Event from
> # the repository. If the length of any attribute exceeds this value, it
> will be truncated when the event is re>
> nifi.provenance.repository.max.attribute.length=65536
> nifi.provenance.repository.concurrent.merge.threads=2
>
>
> # Volatile Provenance Respository Properties
> nifi.provenance.repository.buffer.size=100000
>
> # Component and Node Status History Repository
>
> nifi.components.status.repository.implementation=org.apache.nifi.controller.status.history.VolatileComponentSt>
>
> # Volatile Status History Repository Properties
> nifi.components.status.repository.buffer.size=1440
> nifi.components.status.snapshot.frequency=1 min
>
> # QuestDB Status History Repository Properties
> nifi.status.repository.questdb.persist.node.days=14
> nifi.status.repository.questdb.persist.component.days=3
> nifi.status.repository.questdb.persist.location=./status_repository
>
> # Site to Site properties
> nifi.remote.input.host=
> nifi.remote.input.secure=true
> nifi.remote.input.socket.port=
> nifi.remote.input.http.enabled=true
> nifi.remote.input.http.transaction.ttl=30 sec
> nifi.remote.contents.cache.expiration=30 secs
>
> # web properties #
> #############################################
>
> # For security, NiFi will present the UI on 127.0.0.1 and only be
> accessible through this loopback interface.
> # Be aware that changing these properties may affect how your instance can
> be accessed without any restriction.
> # We recommend configuring HTTPS instead. The administrators guide
> provides instructions on how to do this.
>
> #############################################
> nifi.web.https.host=<IP>
> nifi.web.https.port=<my port>
> nifi.web.https.network.interface.default=
> nifi.web.jetty.working.directory=./work/jetty
> nifi.web.jetty.threads=200
> nifi.web.max.header.size=16 KB
> nifi.web.proxy.context.path=
> nifi.web.proxy.host=<proxy IP>
> nifi.web.max.content.size=
> nifi.web.max.requests.per.second=30000
> nifi.web.request.timeout=60 secs
> nifi.web.request.ip.whitelist=
> nifi.web.should.send.server.version=true
>
> # Include or Exclude TLS Cipher Suites for HTTPS
> nifi.web.https.ciphersuites.include=
> nifi.web.https.ciphersuites.exclude=
>
> # security properties #
> nifi.sensitive.props.key=<key>
> nifi.sensitive.props.key.protected=
> nifi.sensitive.props.algorithm=NIFI_PBKDF2_AES_GCM_256
> nifi.sensitive.props.provider=BC
> nifi.sensitive.props.additional.keys=
>
> nifi.security.autoreload.enabled=false
> nifi.security.autoreload.interval=10 secs
> nifi.security.keystore=./conf/keystore.p12
> nifi.security.keystoreType=PKCS12
> nifi.security.keystorePasswd=<key store>
> nifi.security.keyPasswd=<key pass>
> nifi.security.truststore=./conf/truststore.p12
> nifi.security.truststoreType=PKCS12
> nifi.security.truststorePasswd=<pass>
> nifi.security.user.authorizer=managed-authorizer
> nifi.security.allow.anonymous.authentication=false
>
> # OpenId Connect SSO Properties #
> nifi.initial.admin.identity=ad...@astrapay.com
> nifi.security.user.oidc.discovery.url=https://login.microsoftonline.com/<my
> client ID>/v>
> nifi.security.user.oidc.connect.timeout=5 secs
> nifi.security.user.oidc.read.timeout=5 secs
> nifi.security.user.oidc.client.id=<my client ID>
> nifi.security.user.oidc.client.secret=<my client secret>
> #nifi.security.user.oidc.use.jwks.endpoint=true
> nifi.security.user.oidc.preferred.jwsalgorithm=
> nifi.security.user.oidc.additional.scopes=profile, email, openid
> nifi.security.user.oidc.claim.identifying.user=upn
> nifi.security.user.oidc.redirect.uri=https://
> <IP:port>/nifi-api/access/oidc/callback
> nifi.security.user.oidc.enabled=true
> # cluster common properties (all nodes must have same values) #
> nifi.cluster.protocol.heartbeat.interval=5 sec
> nifi.cluster.protocol.heartbeat.missable.max=8
> nifi.cluster.protocol.is.secure=false
>
> # cluster node properties (only configure for cluster nodes) #
> nifi.cluster.is.node=false
> nifi.cluster.node.address=
> nifi.cluster.node.protocol.port=
> nifi.cluster.node.protocol.threads=10
> nifi.cluster.node.protocol.max.threads=50
> nifi.cluster.node.event.history.size=25
> nifi.cluster.node.connection.timeout=5 sec
> nifi.cluster.node.read.timeout=5 sec
> nifi.cluster.node.max.concurrent.requests=100
> nifi.cluster.firewall.file=
> nifi.cluster.flow.election.max.wait.time=5 mins
> nifi.cluster.flow.election.max.candidates=
>
> # cluster load balancing properties #
> nifi.cluster.load.balance.host=
> nifi.cluster.load.balance.port=6342
> nifi.cluster.load.balance.connections.per.node=1
> nifi.cluster.load.balance.max.thread.count=8
> nifi.cluster.load.balance.comms.timeout=30 sec
>
> # zookeeper properties, used for cluster management #
> nifi.zookeeper.connect.string=
> nifi.zookeeper.connect.timeout=10 secs
> nifi.zookeeper.session.timeout=10 secs
> nifi.zookeeper.root.node=/nifi
> nifi.zookeeper.client.secure=false
> nifi.zookeeper.security.keystore=
> nifi.zookeeper.security.keystoreType=
> nifi.zookeeper.security.keystorePasswd=
> nifi.zookeeper.security.truststore=
> nifi.zookeeper.security.truststoreType=
> nifi.zookeeper.security.truststorePasswd=
>
> # Zookeeper properties for the authentication scheme used when creating
> acls on znodes used for cluster manage>
> # Values supported for nifi.zookeeper.auth.type are "default", which will
> apply world/anyone rights on znodes
> # and "sasl" which will give rights to the sasl/kerberos identity used to
> authenticate the nifi node
> # The identity is determined using the value in
> nifi.kerberos.service.principal and the removeHostFromPrincipal
> # and removeRealmFromPrincipal values (which should align with the
> kerberos.removeHostFromPrincipal and kerber>
> # values configured on the zookeeper server).
> nifi.zookeeper.auth.type=
> nifi.zookeeper.kerberos.removeHostFromPrincipal=
> nifi.zookeeper.kerberos.removeRealmFromPrincipal=
>
> # kerberos #
> nifi.kerberos.krb5.file=
>
> # kerberos service principal #
> nifi.kerberos.service.principal=
> nifi.kerberos.service.keytab.location=
>
> # kerberos spnego principal #
> nifi.kerberos.spnego.principal=
> nifi.kerberos.spnego.keytab.location=
> nifi.kerberos.spnego.authentication.expiration=12 hours
>
> # external properties files for variable registry
> # supports a comma delimited list of file locations
> nifi.variable.registry.properties=
> # analytics properties #
> nifi.analytics.predict.enabled=false
> nifi.analytics.predict.interval=3 mins
> nifi.analytics.query.interval=5 mins
>
> nifi.analytics.connection.model.implementation=org.apache.nifi.controller.status.analytics.models.OrdinaryLeas>
> nifi.analytics.connection.model.score.name=rSquared
> nifi.analytics.connection.model.score.threshold=.90
>
> # runtime monitoring properties
> nifi.monitor.long.running.task.schedule=
> nifi.monitor.long.running.task.threshold=
>
> authorizer.xml
>
> <authorizers>
>     <userGroupProvider>
>         <identifier>file-user-group-provider</identifier>
>         <class>org.apache.nifi.authorization.FileUserGroupProvider</class>
>         <property name="Users File">./conf/users.xml</property>
>         <property name="Initial User Identity 1">email admin</property>
>         <property name="Legacy Authorized Users File"></property>
>     </userGroupProvider>
>
>    <userGroupProvider>
>         <identifier>aad-user-group-provider</identifier>
>
> <class>org.apache.nifi.authorization.azure.AzureGraphUserGroupProvider</class>
>         <property name="Refresh Delay">5 mins</property>
>         <property name="Authority Endpoint">
> https://login.microsoftonline.com</property>
>         <property name="Directory ID">directory ID</property>
>         <property name="Application ID">client ID</property>
>         <property name="Client Secret">client secret</property>
>         <property name="Group Filter Substring">NiFi-AAD</property>
>         <property name="Page Size">100</property>
>         <property name="Claim for Username">email</property>
>     </userGroupProvider>
>
>     <userGroupProvider>
>         <identifier>composite-configurable-user-group-provider</identifier>
>
> <class>org.apache.nifi.authorization.CompositeConfigurableUserGroupProvider</class>
>         <property name="Configurable User Group
> Provider">file-user-group-provider</property>
>         <property name="User Group Provider
> 1">aad-user-group-provider</property>
>     </userGroupProvider>
>
>     <accessPolicyProvider>
>         <identifier>composite-configurable-user-group-provider</identifier>
>
> <class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
>         <property name="User Group
> Provider">file-access-policy-provider</property>
>         <property name="Authorizations
> File">./conf/authorizations.xml</property>
>         <property name="Initial Admin Identity">email admin</property>
>         <property name="Legacy Authorized Users File"></property>
>         <property name="Node Identity 1"></property>
>     </accessPolicyProvider>
>
>     <authorizer>
>         <identifier>managed-authorizer</identifier>
>
> <class>org.apache.nifi.authorization.StandardManagedAuthorizer</class>
>         <property name="Access Policy
> Provider">file-access-policy-provider</property>
>     </authorizer>
> </authorizers>
>
> When i start my NiFi in SSH, i got this error instead:
>
> 2023-11-02 04:37:15,839 ERROR [main] global CoreHttpProvider[send] -
> 220Graph service exception Error code: Authorization_RequestDenied
>
> 2023-11-02 04:37:15,840 ERROR [main] global CoreHttpProvider[send] -
> 220Error message: Insufficient privileges to complete the operation.
>
> 2023-11-02 04:37:15,841 ERROR [main] global CoreHttpProvider[send] - 220
>
> 2023-11-02 04:37:15,842 ERROR [main] global CoreHttpProvider[send] -
> 220GET
> https://graph.microsoft.com/v1.0/groups?%24select=displayName&%24top=100
>
> 2023-11-02 04:37:15,842 ERROR [main] global CoreHttpProvider[send] -
> 220SdkVersion : graph-java/v2.10.0
>
> 2023-11-02 04:37:15,843 ERROR [main] global CoreHttpProvider[send] -
> 220Authorization : [PII_REDACTED]
>
> 2023-11-02 04:37:15,843 ERROR [main] global CoreHttpProvider[send] - 220
>
> 2023-11-02 04:37:15,844 ERROR [main] global CoreHttpProvider[send] - 220
>
> 2023-11-02 04:37:15,845 ERROR [main] global CoreHttpProvider[send] -
> 220403 : Forbidden
>
> 2023-11-02 04:37:15,845 ERROR [main] global CoreHttpProvider[send] - 220[…]
>
> 2023-11-02 04:37:15,846 ERROR [main] global CoreHttpProvider[send] - 220
>
> 2023-11-02 04:37:15,847 ERROR [main] global CoreHttpProvider[send] -
> 220[Some information was truncated for brevity, enable debug logging for
> more details]
>
> 2023-11-02 04:37:15,847 ERROR [main] global Throwable detail:
> com.microsoft.graph.http.GraphServiceException: Error code:
> Authorization_RequestDenied Error message: Insufficient privileges to
> complete the operation.
>
> GET
> https://graph.microsoft.com/v1.0/groups?%24select=displayName&%24top=100
> SdkVersion : graph-java/v2.10.0 Authorization : [PII_REDACTED]
>
> 403 : Forbidden [...]
>
> [Some information was truncated for brevity, enable debug logging for more
> details] 2023-11-02 04:37:16,072 ERROR [main] o.s.web.context.ContextLoader
> Context initialization failed
> org.springframework.beans.factory.UnsatisfiedDependencyException: Error
> creating bean with name
> 'org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration':
> Unsatisfied dependency expressed through method
> 'setFilterChainProxySecurityConfigurer' parameter 1; nested exception is
> org.springframework.beans.factory.BeanExpressionException: Expression
> parsing failed; nested exception is
> org.springframework.beans.factory.UnsatisfiedDependencyException: Error
> creating bean with name
> 'org.apache.nifi.web.NiFiWebApiSecurityConfiguration': Unsatisfied
> dependency expressed through method 'setJwtAuthenticationProvider'
> parameter 0; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'jwtAuthenticationProvider' defined in class path resource
> [nifi-web-security-context.xml]: Cannot resolve reference to bean
> 'authorizer' while setting constructor argument; nested exception is
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'authorizer': FactoryBean threw exception on object
> creation; nested exception is
> org.apache.nifi.authorization.exception.AuthorizerCreationException: Failed
> to load UserGroup due to Error code: Authorization_RequestDenied Error
> message: Insufficient privileges to complete the operation.
>
>
>
> Can you please help me with this issue ? Thank you.
>
> Best Regards,
>
> Lourdes Ursela Carmen
>
>

Reply via email to