我正在使用Microsoft Java SDK连接到Azure云。
我已经从.crt,.key&创建了一个证书(p12文件)。 root.crt中。
我已在Azure AD>应用程序注册>设置>上传公钥下上传.crt。
在我的Java代码之后,我尝试通过将p12内容和密码传递到以下API来获取Azure客户端(Authenticate):
ApplicationTokenCredentials credentials = new ApplicationTokenCredentials();
public ApplicationTokenCredentials(String clientId, String domain, byte[] certificate, String password, AzureEnvironment)
Azure azure = Azure.authenticate(credentials).withSubscription(SUBSCRIPTION_ID);
上述通话成功。但是,如果我们尝试获取azure.networks()
或azure.storage()
,则会因以下错误而失败:
AADSTS70002:验证凭据时出错。 AADSTS50012:客户端断言不在其有效时间范围内。
请帮我解决这个问题。
答案 0 :(得分:0)
根据Certificate credentials for application authentication,上传公钥后。
我们还需要更新清单
在客户端应用程序的Azure应用程序注册中,打开应用程序清单,并使用以下架构将keyCredentials属性替换为新的证书信息:
"keyCredentials": [
{
"customKeyIdentifier": "$base64Thumbprint",
"keyId": "$keyid",
"type": "AsymmetricX509Cert",
"usage": "Verify",
"value": "$base64Value"
}
]
如果cert不是manditory,我们也可以使用azure portal生成秘密。之后我们可以通过以下方式获取ApplicationTokenCredentials
public ApplicationTokenCredentials(String clientId,
String domain,
String secret,
AzureEnvironment environment)
注意:如果我们想要访问Azure资源,我们还需要绑定Azure AD application to role。