【问题标题】:Management Microsoft Azure by FlaskFlask 管理 Microsoft Azure
【发布时间】:2017-08-11 02:07:50
【问题描述】:

我正在开发一个使用 Flask 的 Azure 管理网站。 我用谷歌搜索并发现了以下示例:

https://github.com/Azure-Samples/active-directory-python-flask-graphapi-web-v2

但此示例用于访问 Microsoft Graph API,而不是 Azure 资源管理 API。

microsoft = oauth.remote_app(
    'microsoft',
    consumer_key='Register your app at apps.dev.microsoft.com',
    consumer_secret='Register your app at apps.dev.microsoft.com',
    request_token_params={'scope': 'offline_access User.Read'},
    base_url='https://graph.microsoft.com/v1.0/',
    request_token_url=None,
    access_token_method='POST',
    access_token_url='https://login.microsoftonline.com/common/oauth2/v2.0/token',
    authorize_url='https://login.microsoftonline.com/common/oauth2/v2.0/authorize'
)

我认为根据以下文档将base_url 更改为https://management.azure.com/

https://docs.microsoft.com/azure/azure-resource-manager/resource-manager-api-authentication

但是这段代码不起作用。

能否告诉我如何使用 Flask + OAuth2(支持的 MSAL)和 Azure 管理 API?

或者,是否有适用于 Python 的 MSAL?

【问题讨论】:

标签: azure flask oauth-2.0 azure-active-directory azure-resource-manager


【解决方案1】:

您可以通过如下更改配置来修改同一个 Flask 示例应用以使用 v1 端点:

microsoft = oauth.remote_app(
    'microsoft',
    consumer_key='Register your app at apps.dev.microsoft.com',
    consumer_secret='Register your app at apps.dev.microsoft.com',
    base_url='https://management.azure.com',
    request_token_url=None,
    access_token_method='POST',
    access_token_url='https://login.microsoftonline.com/common/oauth2/token',
    authorize_url='https://login.microsoftonline.com/common/oauth2/authorize?resource=https://management.azure.com/'
)

需要指出的主要区别:

  • 删除 request_token_parameters 部分
  • base url 替换为https://management.azure.com
  • authorize_url 替换为authorize_url='https://login.microsoftonline.com/common/oauth2/authorize?resource=https://management.azure.com/'

然后您可以按如下方式调用 API:

subscriptions = microsoft.get('subscriptions?api-version=2015-01-01')

【讨论】:

  • 谢谢!但这是针对 v1 端点的......但是我希望运行 v1 端点,所以您的建议非常有帮助!我的最新代码:microsoft = oauth.remote_app('microsoft', consumer_key='', consumer_secret='', base_url='management.azure.com', request_token_url=None, access_token_method='POST', access_token_url= 'login.microsoftonline.com/common/oauth2/token', authorize_url='login.microsoftonline.com/common/oauth2/…')
  • 对不起,我未能更新第一个代码 sn-p,只指出了所谓的差异(我没有做出)。感谢您的编辑,现在它是正确的。
【解决方案2】:

请参考 Azure AD v2.0 端点restrictions on services and APIs。 v2.0 端点仅发布访问令牌:

请求令牌的应用。如果逻辑应用程序由多个不同的组件或层组成,则应用程序可以为自己获取访问令牌。要查看此场景的实际效果,请查看我们的入门教程。

Outlook 邮件、日历和联系人 REST API,所有这些 API 都位于 https://outlook.office.com。要了解如何编写访问这些 API 的应用程序,请参阅 Office 入门教程。

Microsoft Graph API。您可以了解有关 Microsoft Graph 和可用数据的更多信息。

因此 Azure AD v2.0 端点当前不支持 Azure 资源管理 API。

【讨论】:

猜你喜欢
  • 2021-01-05
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-02-10
  • 2019-03-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多