代码之家  ›  专栏  ›  技术社区  ›  Rana dlev

python aad(azure active directory)证书身份验证

  •  0
  • Rana dlev  · 技术社区  · 7 年前

    我正试图通过证书用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>'

    据我所知, '<客户证书>' 是私钥,但我无法导出私钥,因为它是不允许的。

    所以我不知道如何用这个证书从aad获得认证。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Sa Yang    7 年前

    如果无法获取私钥,则不会使用此证书通过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

    您必须上载此证书( server.crt 蓝天 应用程序设置中的门户。保存此证书后, 门户将为您提供此证书的指纹,即 在获取令牌调用中需要。关键是 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'
     }
    

    希望这有帮助!