【Azure Developer】【Python 】使用 azure.identity 和 azure.common.credentials 獲取Azure AD的Access Token的兩種方式

問(wèn)題描述

使用Python代碼,展示如何從Azure AD 中獲取目標(biāo)資源的 Access Token。

如要了解如何從AAD中獲取 client id是钥,client secret讥巡,tenant id,請(qǐng)參考博文:【Azure Developer】Python代碼通過(guò)AAD認(rèn)證訪問(wèn)微軟Azure密鑰保管庫(kù)(Azure Key Vault)中機(jī)密信息(Secret)* 中的操作步驟一欄趴樱。*

代碼展示

獲取方式一:使用 azure.identity

1)調(diào)用 ClientSecretCredential 方法馒闷,通過(guò)client_id, client_secret 叁征,tenant_id 以及 authority=AzureAuthorityHosts.AZURE_CHINA纳账,初始化 credentials 對(duì)象

2)調(diào)用對(duì)象中的 get_token方法,特別注意參數(shù) scopes 的傳遞捺疼,如 "https://microsoftgraph.chinacloudapi.cn/.default", 如果缺少.default疏虫,則會(huì)提示參數(shù)錯(cuò)誤(詳見[遇見問(wèn)題]部分)

print("方式一: ClientSecretCredential")

from azure.identity import ClientSecretCredential

credentials = ClientSecretCredential(client_id='xxxxxxxx-xxxx-xxxx-xxxx-76f50363af33', client_secret='.~V9ij1.5Y_F8rL_k8DNpj~RSLFf~H56nH', tenant_id='xxxxxxxx-xxxx-xxxx-xxxx-1316152d9587',authority=AzureAuthorityHosts.AZURE_CHINA)

token =credentials.get_token("https://microsoftgraph.chinacloudapi.cn/.default")

print(token)

調(diào)用方式二:使用 azure.common.credentials

  1. 調(diào)用 ServicePrincipalCredentials 方法,同樣通過(guò)參數(shù) client_id, secret, tenant, resource 和 china='true' 啤呼, 初始化 credentials 對(duì)象

  2. 解析credentials對(duì)象卧秘,獲取Token中的 access_token屬性值。credentials.token['access_token']

print("方式二: ServicePrincipalCredentials")
from azure.common.credentials import ServicePrincipalCredentials

credentials = ServicePrincipalCredentials(client_id='xxxxxxxx-xxxx-xxxx-xxxx-76f50363af33', secret='.~xxxx.xxxx~xxxx~xxxx', tenant='xxxxxxxx-xxxx-xxxx-xxxx-1316152d9587', resource='https://microsoftgraph.chinacloudapi.cn/', china='true')

access_token = credentials.token['access_token']
print(access_token)

方式一和方式二執(zhí)行的結(jié)果相同

No alt text provided for this image

PS: 使用 https://jwt.io/ 可以Decoded token 內(nèi)容官扣。已可讀方式查看翅敌。

No alt text provided for this image

遇見問(wèn)題

錯(cuò)誤一:get_token 提示 requires at least one scope。

Traceback (most recent call last):
  File "client.py", line 7, in <module>
    print(credentials.get_token(scopes=""))
  File "C:\Users\bulu\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\azure\identity\_internal\get_token_mixin.py", line 64, in get_tokent_token_mixin.py", line 64, 
in get_token    raise ValueError('"get_token" requires at least one scope')
ValueError: "get_token" requires at least one scope

錯(cuò)誤的原因就是輸入的scope參數(shù)不正確惕蹄。需要輸入“https://microsoftgraph.chinacloudapi.cn/.default" 攜帶.default蚯涮。

The /.default scope is built in for every application that refers to the static list of permissions configured on the application registration. Source: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#the-default-scope

參考資料

The /.default scope: https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent#the-default-scope

identity Package: https://docs.microsoft.com/zh-cn/python/api/azure-identity/azure.identity?view=azure-python

AzureAuthorityHosts Classhttps://docs.microsoft.com/zh-cn/python/api/azure-identity/azure.identity.azureauthorityhosts?view=azure-python

當(dāng)在復(fù)雜的環(huán)境中面臨問(wèn)題,格物之道需:濁而靜之徐清卖陵,安以動(dòng)之徐生遭顶。 云中,恰是如此!

分類: 【Azure Developer】

標(biāo)簽: azure.identity 和 azure.common.credentials, azure python, Azure Developer

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泪蔫,一起剝皮案震驚了整個(gè)濱河市棒旗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌撩荣,老刑警劉巖铣揉,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異餐曹,居然都是意外死亡老速,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門凸主,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)橘券,“玉大人,你說(shuō)我怎么就攤上這事∨越ⅲ” “怎么了锋华?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)箭窜。 經(jīng)常有香客問(wèn)我毯焕,道長(zhǎng),這世上最難降的妖魔是什么磺樱? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任纳猫,我火速辦了婚禮,結(jié)果婚禮上竹捉,老公的妹妹穿的比我還像新娘芜辕。我一直安慰自己,他們只是感情好块差,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布侵续。 她就那樣靜靜地躺著,像睡著了一般憨闰。 火紅的嫁衣襯著肌膚如雪状蜗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天鹉动,我揣著相機(jī)與錄音轧坎,去河邊找鬼。 笑死泽示,一個(gè)胖子當(dāng)著我的面吹牛眶根,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播边琉,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼记劝!你這毒婦竟也來(lái)了变姨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤厌丑,失蹤者是張志新(化名)和其女友劉穎定欧,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怒竿,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡砍鸠,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耕驰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片爷辱。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饭弓,到底是詐尸還是另有隱情双饥,我是刑警寧澤,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布弟断,位于F島的核電站咏花,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏阀趴。R本人自食惡果不足惜昏翰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刘急。 院中可真熱鬧棚菊,春花似錦、人聲如沸排霉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攻柠。三九已至球订,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瑰钮,已是汗流浹背冒滩。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留浪谴,地道東北人开睡。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像苟耻,于是被迫代替她去往敵國(guó)和親篇恒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容