英文:
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 ('org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID')
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: "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"
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 ('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)
答案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: ["org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID"]
You can also input it this way:
authenticationProviders:
- "org.apache.pulsar.broker.authentication.oidc.AuthenticationProviderOpenID"
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论