排查服务主体身份验证问题
本文提供了通过各种 TokenCredential
实现,通过服务主体对 Azure SDK for Java 应用程序进行身份验证时遇到的问题的处理指南。 有关详细信息,请参阅使用服务主体进行 Azure 身份验证。
排查 ClientSecretCredential 问题
使用 ClientSecretCredential
时,可以为 ClientAuthenticationException
选择 try/catch。 下表显示了此异常指示的错误以及缓解方法:
错误代码 | 问题 | 缓解操作 |
---|---|---|
AADSTS7000215 |
提供的客户端机密无效。 | 确保构造凭据时提供的 clientSecret 有效。 如果不确定,请使用 Azure 门户创建新的客户端机密。 有关详细信息,请参阅创建可访问资源的 Microsoft Entra 应用程序和服务主体的创建新的应用程序机密部分。 |
AADSTS7000222 |
提供了过期的客户端机密。 | 使用 Azure 门户创建新的客户端机密。 有关详细信息,请参阅创建可访问资源的 Microsoft Entra 应用程序和服务主体的创建新的应用程序机密部分。 |
AADSTS700016 |
在指定的租户中找不到指定的应用程序。 | 确保指定的 clientId 和 tenantId 对于你的应用程序注册是正确的。 对于多租户应用,请确保租户管理员已将应用程序添加到所需的租户。 有关详细信息,请参阅创建可访问资源的 Microsoft Entra 应用程序和服务主体。 |
排查 ClientCertificateCredential 问题
使用 ClientCertificateCredential
时,可以为 ClientAuthenticationException
选择 try/catch。 下表显示了此异常指示的错误以及缓解方法:
错误代码 | 说明 | 缓解操作 |
---|---|---|
AADSTS700027 |
客户端断言包含无效的签名。 | 确保已将指定的证书上传到 Microsoft Entra 应用程序注册。 有关详细信息,请参阅创建可访问资源的 Microsoft Entra 应用程序和服务主体的上传由证书颁发机构颁发的受信任证书部分。 |
AADSTS700016 |
在指定的租户中找不到指定的应用程序。 | 确保指定的 clientId 和 tenantId 对于你的应用程序注册是正确的。 对于多租户应用,请确保租户管理员已将应用程序添加到所需的租户。 有关详细信息,请参阅创建可访问资源的 Microsoft Entra 应用程序和服务主体。 |
排查 ClientAssertionCredential 问题
使用 ClientAssertionCredential
时,可以为 ClientAuthenticationException
选择 try/catch。 下表显示了此异常指示的错误以及缓解方法:
错误代码 | 说明 | 缓解操作 |
---|---|---|
AADSTS700021 |
客户端断言应用程序标识符与 client_id 参数不匹配。 |
确保创建的 JWT 断言为有效负载的 sub 和 issuer 值指定了正确的值。 这两个字段都应等于 clientId 。 有关客户端断言格式,请参阅 Microsoft 标识平台应用程序身份验证证书凭据。 |
AADSTS700023 |
客户端断言受众声明与 Realm 颁发者不匹配。 | 确保创建的 JWT 断言中的受众 aud 字段具有有效负载中指定的受众的正确值。 将此字段设置为 https://login.microsoftonline.com/{tenantId}/v2 。 |
AADSTS50027 |
JWT 令牌无效或格式错误。 | 确保 JWT 断言令牌的格式有效。 有关详细信息,请参阅 Microsoft 标识平台应用程序身份验证证书凭据。 |
后续步骤
如果本文中的故障排除指南无法帮助你解决使用 Azure SDK for Java 客户端库时出现的问题,建议您在 Azure SDK for Java GitHub 存储库中提交问题。