首页 > 解决方案 > 使用设备代码以交互方式针对 Azure Active Directory 对 python 应用程序进行身份验证

问题描述

from msrestazure.azure_active_directory import AADTokenCredentials
import adal, uuid, time

authority_host_uri = "https://login.microsoftonline.com"
tenant_id = "..."
client_id = "..."
authority_uri = authority_host_uri + '/' + tenant_id
resource_uri = "https://storage.azure.com/"
context = adal.AuthenticationContext(authority_uri, api_version=None)
code = context.acquire_user_code(resource_uri, client_id)
print(code['message'])

mgmt_token = context.acquire_token_with_device_code(resource_uri, code, client_id)
credentials = AADTokenCredentials(mgmt_token, client_id)

尝试使用设备代码以交互方式访问 Azure AD。无论如何,没有弹出窗口,但控制台正确输出代码“要登录,请使用网络浏览器打开页面https://microsoft.com/devicelogin并输入代码 EUDR3PTL6 进行身份验证。”

打开网址并输入代码,它输出新的错误“AADSTS500113:没有为应用程序注册回复地址”。

如何获得交互式弹出窗口来输入设备代码或用户凭据以从 Azure AD 获取令牌?

标签: pythonazureazure-active-directory

解决方案


这是Device code flow的预期结果,您需要使用 Web 浏览器打开页面https://microsoft.com/devicelogin并输入代码 EUDR3PTL6 进行身份验证。

对于在没有网络浏览器的设备上运行的应用程序,可以通过设备代码机制获取令牌,该机制为用户提供 URL 和代码。用户转到另一台设备上的 Web 浏览器,输入代码并登录,然后 Azure AD 将令牌返回给无浏览器的设备。

您收到 AADSTS500113 错误,因为您没有为您的应用程序注册回复地址。您需要在 azure 门户中添加平台并提供重定向 url。重定向 url 不用于设备代码流,但它是必需的。

在此处输入图像描述

参考:

https://github.com/AzureAD/azure-activedirectory-library-for-python/wiki/Acquire-tokens


推荐阅读