如何将librdkafka与OIDC和Azure AD一起用作OAUTHBEARER的令牌提供程序?

r7xajy2e  于 2022-12-11  发布在  Kafka
关注(0)|答案(1)|浏览(253)

问题
我想将Kafka OIDC与Azure AD一起用作令牌提供程序,但我遇到了一些奇怪的错误。
我已经阅读了许多Azure文档页面,并尝试了https://github.com/Azure/azure-event-hubs-for-kafka中的示例-当我使用python和C++进行测试时,所有这些都对我有效。包括https://github.com/Azure/azure-event-hubs-for-kafka/tree/master/tutorials/oauth/python中列出的oauth(使用Azure AD)示例

错误

当我尝试使用https://learn.microsoft.com/en-us/azure/active-directory/develop/v2-protocols-oidc和v2端点之后的已注册应用的网页中的凭据时,结果是ERROR|rdkafka#producer-1| [thrd:app]: rdkafka#producer-1: sasl_ssl://myhub.servicebus.windows.net:9093/bootstrap: SASL authentication error: Invalid URI: The format of the URI could not be determined. (after 272ms in state AUTH_REQ)

设置

同样,我测试过的所有现有示例都能为我工作,但是没有一个使用OIDC。我使用的配置如下--在sasl.oauthbearer.token.endpoint.urlsasl.oauthbearer.config中应该使用什么来使其工作?

conf->set("bootstrap.servers", "myhub.servicebus.windows.net:9093", errstr);
    conf->set("security.protocol", "SASL_SSL", errstr);
    conf->set("sasl.mechanism", "OAUTHBEARER", errstr);
    conf->set("sasl.oauthbearer.method", "oidc", errstr);
    conf->set("sasl.oauthbearer.client.id", "***", errstr);
    conf->set("sasl.oauthbearer.client.secret", "***", errstr);
    conf->set("sasl.oauthbearer.token.endpoint.url", "https://login.microsoftonline.com/***/oauth2/v2.0/token", errstr);
    conf->set("sasl.oauthbearer.scope", "api://***/.default", errstr);

链接

融合Kafka OIDC -https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=186877575
C++程序库KafkaOIDChttps://github.com/edenhill/librdkafka/blob/b871fdabab84b2ea1be3866a2ded4def7e31b006/src/rdkafka_sasl_oauthbearer_oidc.c#L242
Github问题-https://github.com/Azure/azure-event-hubs-for-kafka/issues/223

编辑日期:

使用debug=all进行的进一步调试显示,当应用程序在SASL身份验证序列上失败时,收到OAUTHBEARER令牌。

SASL OAUTHBEARER client in state client-first-message
Send SASL Kafka frame to broker
Sent SaslAuthenticateRequest

Received SaslAuthenticateResponse
Invalid URI: The format of the URI could not be determined.
o4hqfura

o4hqfura1#

好的,Azure回应说Kafka OIDC没有在他们这边进行测试,可能不会得到经纪人的支持。
但我测试了它与Kafka OIDC的工作-我将贡献与例子,他们的回购很快。
问题是使用已注册应用程序的作用域(api://{app-id}/.default)与命名空间的作用域(https://myhub.servicebus.windows.net/.default)-后者是正确的。
这反过来又导致接收到不正确的token-type和Invalid URI格式-这里真正有帮助的是来自confluent-kafka的示例,其中没有涉及azure依赖项https://github.com/confluentinc/confluent-kafka-python/blob/master/examples/oauth_producer.py

相关问题