python - 使用设备代码以交互方式针对 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 获取令牌?
解决方案
这是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
推荐阅读
- google-api - Add attachments to google calendar in someone else events
- r - (速度挑战)任何更快的方法来计算两个矩阵的行之间的距离矩阵,就欧几里得距离而言?
- c# - System.Data.SqlClient.SqlException:'操作数类型冲突:datetime2 与十进制不兼容
- azure-devops - 拉取请求弹出一个确认框
- java - 日期从数据库显示为前一天到前端
- angular - Angular 组件缺少模板
- c++ - 智能指针是否会删除由 new 定义的内存
- python - python对象的身份
- python-2.7 - Subprocess.Popen() 在终端上工作,而不是在 VSCode 上
- sql - 通过在Oracle中分组一列从表中选择数据