【发布时间】:2021-01-28 04:29:55
【问题描述】:
TL;DR:由于令牌中的受众声明错误,使用托管身份对 Databricks 的身份验证失败。
技术细节:使用托管标识(使用http://169.254.169.254/metadata/identity/oauth2/token API)获取访问数据块的令牌时,返回的令牌受众是“spn:2ff814a6-3304-4ab8-85cb-cd0e6f879c1d”而不是“2ff814a6-3304-4ab8-” 85cb-cd0e6f879c1d'。
尝试使用获取的令牌时,出现以下错误:
Error 400 io.jsonwebtoken.IncorrectClaimException: Expected aud claim to be: 2ff814a6-3304-4ab8-85cb-cd0e6f879c1d, but was: spn:2ff814a6-3304-4ab8-85cb-cd0e6f879c1d.
如果资源是 guid 而不是 url,观众似乎总是以“spn:”为前缀。
我也尝试使用 databricks 应用程序 url ('https://azuredatabricks.net/') 作为资源,但这里也不接受令牌。
这是一个已知问题吗?是否有任何解决方法(使用服务主体方法除外)?
谢谢!
【问题讨论】:
-
您在哪个服务中使用了用户分配的 MSI?虚拟机?
-
在 Azure 容器实例中
-
您是否在jwt.io 中解码了您的令牌以查看其实际受众(即
aud)?对吗? -
是的。 aud 声明是“spn:2ff814a6-3304-4ab8-85cb-cd0e6f879c1d”而不是“2ff814a6-3304-4ab8-85cb-cd0e6f879c1d”(没有“spn:”),这会导致不匹配。
-
你能显示你用来获取令牌的详细信息吗?包括参数。
标签: azure authentication azure-active-directory azure-databricks azure-managed-identity