Python AAD(Azure Active Directory)使用证书进行身份验证

时间:2018-06-06 01:11:35

标签: python-3.x azure ssl-certificate azure-active-directory x509certificate

我正在尝试通过证书通过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进行身份验证。

1 个答案:

答案 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'
 }

希望这有帮助!