【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]

相关文章
|
18天前
|
API Python
【Azure Developer】分享一段Python代码调用Graph API创建用户的示例
分享一段Python代码调用Graph API创建用户的示例
41 11
|
1月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。
|
2月前
|
机器人 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`。
|
2月前
|
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.
|
3月前
|
Kubernetes API 开发工具
【Azure Developer】通过SDK(for python)获取Azure服务生命周期信息
需要通过Python SDK获取Azure服务的一些通知信息,如:K8S版本需要更新到指定的版本,Azure服务的维护通知,服务处于不健康状态时的通知,及相关的操作建议等内容。
52 18
|
3月前
|
数据可视化 数据挖掘 Python
告别枯燥数字,拥抱视觉盛宴!Python 数据分析中的数据可视化艺术,你 get 了吗?
在数据驱动时代,数据分析至关重要,但单纯依赖数据表格难以揭示其背后的洞见。这时,数据可视化便彰显出其重要性,尤其借助 Python 的强大工具如 Matplotlib、Seaborn 和 Plotly 等,可将数据转化为直观的图形。Matplotlib 提供高度定制的图表,Seaborn 则简化了图表美化过程。通过折线图、散点图、箱线图、小提琴图及热力图等多种图表形式,我们可以更深入地理解数据分布与关系,有效传达信息并支持决策制定。数据可视化不仅是一门技术,更是讲述数据故事的艺术。
75 3
|
3月前
|
JSON JavaScript 前端开发
借助Python神器,快速get上市公司财务数据
借助Python神器,快速get上市公司财务数据
81 0
|
4月前
|
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命令的疑问解释
|
16天前
|
人工智能 数据可视化 数据挖掘
探索Python编程:从基础到高级
在这篇文章中,我们将一起深入探索Python编程的世界。无论你是初学者还是有经验的程序员,都可以从中获得新的知识和技能。我们将从Python的基础语法开始,然后逐步过渡到更复杂的主题,如面向对象编程、异常处理和模块使用。最后,我们将通过一些实际的代码示例,来展示如何应用这些知识解决实际问题。让我们一起开启Python编程的旅程吧!
|
15天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
下一篇
DataWorks