首页 > 编程语言 >【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

时间:2024-06-03 19:45:49浏览次数:26  
标签:xxxx target get Get Environment token Azure join

问题描述

使用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]

 

标签:xxxx,target,get,Get,Environment,token,Azure,join
From: https://www.cnblogs.com/lulight/p/18229497

相关文章

  • Install-Package 和 dotnet add package安装NuGet包对比
    关于使用场景Install-PackageSSH.NET和dotnetaddpackageSSH.NET这两个命令都用于安装NuGet包,但它们是用于不同命令行工具和环境的。这里是两者的主要区别:Install-PackageSSH.NET:这是一个用于NuGet包管理器控制台的命令,这个控制台是集成在VisualStudio中的。主要用......
  • 第04章—探索CesiumWidget:构建交互式3D地球应用的深度实践
    引言在前两章节中,我们一同探索了Cesium与Vue,React框架结合的基础应用,从环境搭建到如何在组件中无缝嵌入Cesium的三维地球视图,为前端项目注入了地理空间可视化的能力。这一过程不仅加深了我们对MVVM框架的理解,也让Cesium的强大多媒体与空间分析功能得以在现代Web应用中大放......
  • Android 10.0 Launcher3禁用widget微件功能实现
    1.前言在10.0的系统rom定制化开发中,在一些Launcher3的定制化功能中,有些产品禁用appwidget微件功能,要求Launcher去掉加载widget微件功能,接下来具体分析下widget微件的加载流程2.Launcher3禁用widget微件功能实现的核心类packages/apps/Launcher3/src/com/android/launcher3/......
  • 微软云计算之云计算平台、云操作系统Windows Azure
    微软云计算平台微软云计算平台微软的云计算技术WindowsAzure组成微软云操作系统WindowsAzureWindowsAzure概述WindowsAzure计算服务WindowsAzure存储服务全局命名空间体系架构存储域的层次结构双复制引擎文件流层分区层WindowsAzureConnectWindowsAzureCDNFab......
  • Unlearn What You Want to Forget Efficient Unlearning for LLMs
    目录概符号说明UnlearningLayersFusingUnlearningLayers代码ChenJ.andYangD.Unlearnwhatyouwanttoforget:efficientunlearningforllms.2024.概本文提出一种Unlearninglayer去帮助LLMs'遗忘'一些数据.符号说明\(F(\cdot)\),largelanguagemodel......
  • Flutter开发效率提升1000%,Flutter Quick教程之对写好的Widget进行嵌套
    通常写代码的时候,我们是先写好外面的Widget,再写里面的Widget。但是,也有的时候,我们写好了一个Widget,但是我们觉得有必要再在外面嵌套一个Widget,这时候应该怎么做呢?(还有其他方式,本篇讲的就是快捷的方式)1,首先,我们左键选中要嵌套的Widget。2,这时候,我们要选择的嵌套在外面的Widge......
  • 【Flutter】Getx上篇
    ......
  • 【Flutter】Getx下篇
    ......
  • error: no configuration has been provided, try setting KUBERNETES_MASTER environ
    1:问题kubernetes集群,一台master,一台node1,一台node2,重启电脑后,node1节点和node2节点报错如下error:noconfigurationhasbeenprovided,trysettingKUBERNETES_MASTERenvironmentvariable2:解决方法2.1:查看master节点进入到该目录下cd/etc/kubernetes把admi......
  • 【Azure App Service】.NET代码实验App Service应用中获取TLS/SSL 证书 (App Service
    在前一篇文章中,我们是把.NET8应用读取SSL证书(X509)示例部署在AppServiceWindows环境中,那么如果部署在Linux环境,以及LinuxContainer中呢?根据前文中的第一种方法,直接在把证书文件包含在源文件中,通过相对路径读取证书文件的方式,经测试,可以正常工作。但是,对于第二种“通过指......