Azure Identity 获取图表 api
azure identity to get graph api
我目前正在使用以下代码获取数据工厂的服务主体。此代码在本地运行良好,我能够检索 serviceprincipal。
这个问题是我获得身份的方式。我需要提供客户详细信息(这是在 AD 中创建的用于测试目的的演示应用程序注册。)
try:
app = msal.ConfidentialClientApplication(
self.input_client_id, authority=self.input_authority,
client_credential=self.input_secret,
)
result = app.acquire_token_for_client(scopes=self.input_scope)
input_endpoint = "https://graph.microsoft.com/v1.0/servicePrincipals?$filter=startswith(displayName,'{}')".format(datafactory_name)
graph_data = requests.get(
input_endpoint,
headers={'Authorization': 'Bearer ' + result['access_token']},).json()
我想避免这样做,因为我使用 devops 管道 运行 容器注册表中的此代码,并希望避免将秘密作为变量提供。
管道使用服务连接,我使用 Azure CLI 任务登录。
有没有办法替换上面的代码获取客户端凭证。
以下是一些已经在本地完成的试验:
使用 azure devops 服务连接在本地登录以模拟 devops 管道进行测试
az login --service-principal --username <clientid> --password <client_secret> --tenant <tenant_id>
from azure.common.credentials import get_azure_cli_credentials
credentials, subscription = get_azure_cli_credentials()
app = msal.ConfidentialClientApplication(
self.input_client_id, authority=self.input_authority,
client_credential=credentials,
)
这给出了一个错误:'error':'invalid_client'
- 另一种方法,我在本地的“.azure”文件夹中读取了 accessToken.json 文件。我在 json 中得到了 access_token 值,它是
然后替换了
client_credential 使用此值。这奏效了。但随后在 devops 中。我必须创建 .azure 配置文件(我假设 AzureCLI@2 将创建 devops 任务)并将其安装到 docker。另外,accessToken
有 client_secret,而不是实际的标记(长字符串)。
在代码中有更好的方法吗?
感谢您的宝贵时间!
可能是因为client_secret含有特殊字符。一种解决方法是转到 Azure 门户并不断生成新的机密,直到您获得其中没有特殊字符的机密为止。有关详细信息,请参阅 here。
如果您想使用 Azure Identity for Python, you could get access token with AzureCliCredential
Class.
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
access_token = credential.get_token(scopes=["..."])
我目前正在使用以下代码获取数据工厂的服务主体。此代码在本地运行良好,我能够检索 serviceprincipal。 这个问题是我获得身份的方式。我需要提供客户详细信息(这是在 AD 中创建的用于测试目的的演示应用程序注册。)
try:
app = msal.ConfidentialClientApplication(
self.input_client_id, authority=self.input_authority,
client_credential=self.input_secret,
)
result = app.acquire_token_for_client(scopes=self.input_scope)
input_endpoint = "https://graph.microsoft.com/v1.0/servicePrincipals?$filter=startswith(displayName,'{}')".format(datafactory_name)
graph_data = requests.get(
input_endpoint,
headers={'Authorization': 'Bearer ' + result['access_token']},).json()
我想避免这样做,因为我使用 devops 管道 运行 容器注册表中的此代码,并希望避免将秘密作为变量提供。 管道使用服务连接,我使用 Azure CLI 任务登录。
有没有办法替换上面的代码获取客户端凭证。
以下是一些已经在本地完成的试验:
使用 azure devops 服务连接在本地登录以模拟 devops 管道进行测试
az login --service-principal --username <clientid> --password <client_secret> --tenant <tenant_id>
from azure.common.credentials import get_azure_cli_credentials
credentials, subscription = get_azure_cli_credentials()
app = msal.ConfidentialClientApplication(
self.input_client_id, authority=self.input_authority,
client_credential=credentials,
)
这给出了一个错误:'error':'invalid_client'
- 另一种方法,我在本地的“.azure”文件夹中读取了 accessToken.json 文件。我在 json 中得到了 access_token 值,它是
然后替换了 client_credential 使用此值。这奏效了。但随后在 devops 中。我必须创建 .azure 配置文件(我假设 AzureCLI@2 将创建 devops 任务)并将其安装到 docker。另外,accessToken 有 client_secret,而不是实际的标记(长字符串)。 在代码中有更好的方法吗?
感谢您的宝贵时间!
可能是因为client_secret含有特殊字符。一种解决方法是转到 Azure 门户并不断生成新的机密,直到您获得其中没有特殊字符的机密为止。有关详细信息,请参阅 here。
如果您想使用 Azure Identity for Python, you could get access token with AzureCliCredential
Class.
from azure.identity import AzureCliCredential
credential = AzureCliCredential()
access_token = credential.get_token(scopes=["..."])