Apache Pulsar fails to enable OpenID authentication in function worker when configured as specified in documentation

huangapple go评论112阅读模式
英文:

Apache Pulsar fails to enable OpenID authentication in function worker when configured as specified in documentation

问题

当按照文档中的说明在函数工作器中启用OpenID Connect身份验证时,您会遇到以下错误。

[jdk.internal.loader.ClassLoaders$AppClassLoader@659e0bfd] error Uncaught exception in thread main: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID')

我不确定是否配置了任何错误的值导致了这个错误,这里是我的functions_worker.yml文件中配置的示例:

authenticationEnabled: true
authenticationProviders: "org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID"
properties:
  openIDAllowedTokenIssuers: "https://stg.some-website.com/"
  openIDAllowedAudiences: "https://some-website.com/maas, https://some-website.com/userinfo"
  openIDRoleClaim: "https://some-web.com/role"
  openIDAcceptedTimeLeewaySeconds: 0
  openIDCacheSize: 5
  openIDCacheRefreshAfterWriteSeconds: 64800
  openIDCacheExpirationSeconds: 86400
  openIDHttpConnectionTimeoutMillis: 10000
  openIDHttpReadTimeoutMillis: 10000
  openIDRequireIssuersUseHttps: true
  openIDFallbackDiscoveryMode: "DISABLED"

以下是完整的堆栈跟踪:

Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: 2023-07-06T22:47:15,473Z [jdk.internal.loader.ClassLoaders$AppClassLoader@659e0bfd] error Uncaught exception in thread main: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID')
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at [Source: (File); line: 306, column: 26] (through reference chain: org.apache.pulsar.functions.worker.WorkerConfig["authenticationProviders"])
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID')
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at [Source: (File); line: 306, column: 26] (through reference chain: org.apache.pulsar.functions.worker.WorkerConfig["authenticationProviders"])
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1728)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1353)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:311)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.handleNonArray(StringCollectionDeserializer.java:284)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:192)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:182)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:25)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3494)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.functions.worker.WorkerConfig.load(WorkerConfig.java:776)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.broker.PulsarService.initializeWorkerConfigFromBrokerConfig(PulsarService.java:1840)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.PulsarBrokerStarter$BrokerStarter.<init>(PulsarBrokerStarter.java:194)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.PulsarBrokerStarter.main(PulsarBrokerStarter.java:333)
英文:

When following the documentation on enabling OpenID Connect authentication in the Function Worker, you are presented with the following error.

[jdk.internal.loader.ClassLoaders$AppClassLoader@659e0bfd] error Uncaught exception in thread main: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (&#39;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&#39;)

I'm not sure what value if any I've configured incorrectly to cause this, here is an example of my configuration in the functions_worker.yml file.

authenticationEnabled: true
authenticationProviders: &quot;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&quot;
properties:
  openIDAllowedTokenIssuers: &quot;https://stg.some-website.com/&quot;
  openIDAllowedAudiences: &quot;https://some-website.com/maas, https://some-website.com/userinfo&quot;
  openIDRoleClaim: &quot;https://some-web.com/role&quot;
  openIDAcceptedTimeLeewaySeconds: 0
  openIDCacheSize: 5
  openIDCacheRefreshAfterWriteSeconds: 64800
  openIDCacheExpirationSeconds: 86400
  openIDHttpConnectionTimeoutMillis: 10000
  openIDHttpReadTimeoutMillis: 10000
  openIDRequireIssuersUseHttps: true
  openIDFallbackDiscoveryMode: &quot;DISABLED&quot;

Here is the full stack trace

Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: 2023-07-06T22:47:15,473Z [jdk.internal.loader.ClassLoaders$AppClassLoader@659e0bfd] error Uncaught exception in thread main: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (&#39;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&#39;)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at [Source: (File); line: 306, column: 26] (through reference chain: org.apache.pulsar.functions.worker.WorkerConfig[&quot;authenticationProviders&quot;]) 
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `java.util.HashSet` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value (&#39;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&#39;)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at [Source: (File); line: 306, column: 26] (through reference chain: org.apache.pulsar.functions.worker.WorkerConfig[&quot;authenticationProviders&quot;]) 
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1728)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1353)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromString(StdDeserializer.java:311)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.handleNonArray(StringCollectionDeserializer.java:284)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:192)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:182)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.std.StringCollectionDeserializer.deserialize(StringCollectionDeserializer.java:25)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:129)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:314)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:177)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4674)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3494)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.functions.worker.WorkerConfig.load(WorkerConfig.java:776)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.broker.PulsarService.initializeWorkerConfigFromBrokerConfig(PulsarService.java:1840)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.PulsarBrokerStarter$BrokerStarter.&lt;init&gt;(PulsarBrokerStarter.java:194)
Jul 06 22:47:15 lin-0afa7c99.mstarext.com pulsar[6665]: at org.apache.pulsar.PulsarBrokerStarter.main(PulsarBrokerStarter.java:333)

答案1

得分: 1

authenticationProviders 参数必须以 YAML 列表的形式传递。以下是正确的输入方式:

authenticationProviders: ["org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID"]

您也可以这样输入:

authenticationProviders:
  - "org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID"

请注意,当它说:

> 无法构造 java.util.HashSet 的实例

这意味着它正试图从 authenticationProviders 的值创建一个集合。

注意:文档最初是不正确的。我在这里进行了更新:https://github.com/apache/pulsar-site/pull/632。

英文:

The authenticationProviders parameter must be passed as a yaml list. Here is the correct input:

authenticationProviders: [&quot;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&quot;]

You can also input it this way:

authenticationProviders:
  - &quot;org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID&quot;

Note that the error indicates this when it says:

> Cannot construct instance of java.util.HashSet

It is trying to create a set from the value of authenticationProviders.

Note: the docs were originally incorrect. I updated them here: https://github.com/apache/pulsar-site/pull/632.

huangapple
  • 本文由 发表于 2023年7月7日 07:21:08
  • 转载请务必保留本文链接:https://go.coder-hub.com/76633061.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定