我正在尝试通过证书通过AAD验证我的应用来获取访问令牌。证书安装在我的本地计算机上(Windows 10)。访问外部API需要此身份验证。
我正在按照Azure Docs
上发布的步骤进行操作示例代码:
def authenticate_client_cert():
"""
Authenticate using service principal w/ cert.
"""
authority_host_uri = 'https://login.microsoftonline.com'
tenant = '<TENANT>'
authority_uri = authority_host_uri + '/' + tenant
resource_uri = 'https://management.core.windows.net/'
client_id = '<CLIENT_ID>'
client_cert = '<CLIENT_CERT>' ### MISSING THIS
client_cert_thumbprint = '<CLIENT_CERT_THUMBPRINT>'
context = adal.AuthenticationContext(authority_uri, api_version=None)
mgmt_token = context.acquire_token_with_client_certificate(resource_uri, client_id, client_cert, client_cert_thumbprint)
credentials = AADTokenCredentials(mgmt_token, client_id)
return credentials
我有'<CLIENT_ID>'
,'<TENANT>'
和'<CLIENT_CERT_THUMBPRINT>'
,但我遗失'<CLIENT_CERT>'
根据我的理解,'<CLIENT_CERT>'
是私钥,但我无法导出私钥,因为它不被允许。
所以我不确定如何通过此证书从AAD进行身份验证。
答案 0 :(得分:1)
如果您无法获取私钥,则无法使用此证书通过AAD进行身份验证。但您可以自己上传新证书并使用它。
<client_cert>
应该是您生成的密钥文件的名称。
以下是有关Client credentials with certificate in ADAL for python的文档:
生成要在何时使用的证书和私钥的步骤 实现客户端凭证流程如下:
生成密钥:
openssl genrsa -out server.pem 2048
创建证书申请:
openssl req -new -key server.pem -out server.csr
生成证书:
openssl x509 -req -days 365 -in server.csr -signkey server.pem -out server.crt
您必须在Azure上上传此证书(
server.crt
) 应用程序设置中的Portal。保存此证书后, 门户网站将为您提供此证书的指纹 获取令牌调用中需要的。密钥将是server.pem
密钥 你是在第一步中生成的。现在,您可以使用创建客户端凭据流的凭据 ADAL Python中的证书如下:
client_credentials = { "client_id": <your app id>, "thumbprint": <thumbprint of cert file>, "certificate": <key file name> }
例如:
{
"resource": "your_resource",
"tenant" : "test.onmicrosoft.com",
"authorityHostUrl" : "https://login.microsoftonline.com",
"clientId" : "d6835713-b745-48d1-bb62-7a8248477d35",
"thumbprint" : 'C15DEA8656ADDF67BE8031D85EBDDC5AD6C436E1',
"certificate" : 'server.pem'
}
希望这有帮助!