【Azure Developer】Python – Get Access Token by Azure Identity in China Azure Environment

简介: 【Azure Developer】Python – Get Access Token by Azure Identity in China Azure Environment

问题描述

使用Azure Identity,根据指定的客户端凭据获取Access Token中,先后遇见了

  • “ValueError: "get_token" requires at least one scope”
  • “ClientSecretCredential.get_token failed: Authentication failed: sequence item 0: expected str instance, list found”

最初的Python 代码如下:

from azure.identity import ClientSecretCredential,AzureAuthorityHosts  
from azure.mgmt.resource import SubscriptionClient  
# Service principal credentials for Azure
credential = ClientSecretCredential(tenant_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", client_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", client_secret="xxxxxxxxxxxx.xxxx")
access_token = credential.get_token(scopes=["https://management.chinacloudapi.cn/.default"])
print(access_token)

 

问题解答

第一个问题: get_token 的至少需要一个 scope参数

以上代码按照python常规的方式,为传递的参数指定参数名,根据ClientSecretCredential get_token方法介绍,参数名就是 scopes 。

在没有想明白的情况下,最后去掉了指定参数名,直接传入值。问题一消失,问题二产生。

第二个问题:get_token方法失败,参数传递序列中,第一个参数期待的是一个str,但是发现是一个list。

ClientSecretCredential.get_token failed: Authentication failed: sequence item 0: expected str instance, list found

这里是一个copy错误,scopes参数从其它代码中复制过来。并没有仔细对比这里的get_token需要传递的不是数组([]), 而是一个字符串(str)。把第一个参数修改为字符串后。成功获取到Access Token。

正确的完整Python 代码

from azure.identity import ClientSecretCredential,AzureAuthorityHosts  
from azure.mgmt.resource import SubscriptionClient  
# Service principal credentials for Azure
credential = ClientSecretCredential(tenant_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", client_id="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", client_secret="xxxxxxxxxxxx.xxxx")
access_token = credential.get_token("https://management.chinacloudapi.cn/.default")
print(access_token)

 

附录:理解target=" ".join(target)

错误消息:

…\site-packages\msal\token_cache.py", line 103, in _get_access_token

    target=" ".join(target),

TypeError: sequence item 0: expected str instance, list found

源代码:

… …

        return self._get(

            self.CredentialType.ACCESS_TOKEN,

            self.key_makers[TokenCache.CredentialType.ACCESS_TOKEN](

                home_account_id=home_account_id,

                environment=environment,

                client_id=client_id,

                realm=realm,

                target=" ".join(target),

                ),

            default=default)

测试:

print(" ".join(["Hello","World",", This is join method test." ]))

 

输出:

Hello World , This is join method test.

 

说明:

在Python中," ".join(target)这段代码的作用是将target序列中的元素通过指定的分隔符(这里是空格)连接成一个新的字符串。

例如,如果target是['Hello', 'World'],那么" ".join(target)的结果将是'Hello World'。

这个方法通常用于将多个字符串片段合并成一个完整的字符串。

 

 

[END]

相关文章
|
6天前
|
机器人 Shell Linux
【Azure Bot Service】部署Python ChatBot代码到App Service中
本文介绍了使用Python编写的ChatBot在部署到Azure App Service时遇到的问题及解决方案。主要问题是应用启动失败,错误信息为“Failed to find attribute 'app' in 'app'”。解决步骤包括:1) 修改`app.py`文件,添加`init_func`函数;2) 配置`config.py`,添加与Azure Bot Service认证相关的配置项;3) 设置App Service的启动命令为`python3 -m aiohttp.web -H 0.0.0.0 -P 8000 app:init_func`。
|
11天前
|
Linux Python
【Azure Function】Python Function部署到Azure后报错No module named '_cffi_backend'
ERROR: Error: No module named '_cffi_backend', Cannot find module. Please check the requirements.txt file for the missing module.
|
2月前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
45 18
|
2月前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
49 3
|
2月前
|
JSON JavaScript 前端开发
借助Python神器,快速get上市公司财务数据
借助Python神器,快速get上市公司财务数据
31 0
|
3月前
|
API 开发工具 网络架构
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
【Azure Developer】使用Python SDK去Azure Container Instance服务的Execute命令的疑问解释
|
3月前
|
Python
【Azure Function】发布 Python Function 到 Azure 成功,但是无法显示Function列表
【Azure Function】发布 Python Function 到 Azure 成功,但是无法显示Function列表
|
网络架构 Python 前端开发
Python 探析get和post方法
Python 探析get和post方法
5487 0
|
7天前
|
安全 数据处理 开发者
Python中的多线程编程:从入门到精通
本文将深入探讨Python中的多线程编程,包括其基本原理、应用场景、实现方法以及常见问题和解决方案。通过本文的学习,读者将对Python多线程编程有一个全面的认识,能够在实际项目中灵活运用。
|
1天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###