【问题标题】:Python AAD (Azure Active Directory) Authentication with certificate带有证书的 Python AAD(Azure Active Directory)身份验证
【发布时间】:2018-06-06 01:11:34
【问题描述】:

我正在尝试通过证书使用 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

我有 '&lt;CLIENT_ID&gt;''&lt;TENANT&gt;''<CLIENT_CERT_THUMBPRINT>' ,但我缺少 '&lt;CLIENT_CERT&gt;'

据我了解,'&lt;CLIENT_CERT&gt;' 是私钥,但我无法导出私钥,因为它是不允许的。

所以我不确定如何使用此证书从 AAD 进行身份验证。

【问题讨论】:

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


    【解决方案1】:

    如果您无法获取私钥,您将不会使用此证书通过 AAD 进行身份验证。但是您可以自己上传新的证书并使用它。

    &lt;client_cert&gt; 应该是您生成的密钥文件的名称

    这是关于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) 应用程序设置中的门户。保存此证书后, 门户将为您提供此证书的指纹,即 在获取令牌调用中需要。密钥将是 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'
     }
    

    希望这会有所帮助!

    【讨论】:

    • 我想我的问题并不清楚。需要证书才能访问外部 API(我不拥有它)。因此,我无法创建自己的证书来获得身份验证。在 C# 中,有一种方法可以指向安装在您计算机上的证书,但我似乎无法在 python 中找到允许我这样做的库。
    • 嗨@Rana。不幸的是,AFAIK,如果您既不能导出私钥也不使用新证书,我认为没有其他解决方法可以解决此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-11
    • 2015-01-11
    • 1970-01-01
    • 2016-12-15
    • 2016-01-12
    • 2018-03-20
    相关资源
    最近更新 更多