人生没有彩排
每一天都是现场直播

Azure应用注册与访问令牌获取

前言

微软的生态建设很强大,不仅拥有许多非常好用的产品与工具,而且各产品通常也会提供对应的REST API服务,让开发者能够在自己的应用程序中利用开放的API接口来调用微软的服务与各产品的功能。但是想要调用微软各产品的API,则需要先获取到访问令牌,并在调用API时将访问令牌一起发送。访问令牌类似于账号密码,代表了以某个身份和其拥有的权限去访问微软的产品与服务。而获取访问令牌前则需要注册Azure应用,Azure应用代表了所开发的应用程序,通过Azure应用可以方便的管理应用程序所具有的API权限。

关于Azure应用与访问令牌的相关概念和细节这里就不过多介绍,若感兴趣可以去浏览微软官方文档。

注册Azure应用

1、登录Azure门户,并打开Azure AD

2、在AzureAD的左侧菜单中点击应用注册选项

3、然后点击新注册按钮

4、输入Azure应用的名称,并点击注册

5、配置身份验证,将“允许公共客户端流”选项设置为是,然后保存

6、创建客户端密码

7、保存刚创建的客户端密码,即下图所示的值,该密码只显示一次,注意保存,后面要用到

8、添加所需要的API权限,在弹出的窗口中选择对应的服务,比如PowerBI Service

9、记录所选服务对应的Url,即下图红框处。该Url添加.default后缀后即为完整的Scope Url,该Scope Url在后续申请所选服务的API访问令牌时要用到,需要提前保存。如下图所示的PowerBI Service给出的Url为:https://analysis.windows.net/powerbi/api/ ,那么其完整的Scope Url即为:https://analysis.windows.net/powerbi/api/.default

10、选择权限类别,若使用账号密码作为凭证则选择委托的权限,若使用Azure应用的客户端密码作为凭证则选择应用程序权限。如果区分不了,那也可以把两种类别的所需权限都添加进来

11、添加完权限后,将在已配置权限列表中显示。这里的权限也称为范围,代表Azure应用理论上能够拥有的最大权限,而Azure应用实际拥有的权限还需要与使用者所具有的权限取交集

12、给添加的权限授予管理员同意

13、回到Azure应用的概述页面,记录客户端ID与租户ID,后面要用到

14、至此,Azure应用已注册并配置完成,而且还收集到后续需要使用的信息,如客户端ID、租户ID、客户端密码、SCOPE URL等

获取访问令牌

获取访问令牌时需要向微软标识平台发送相关信息,最常用的方式是OAuth2.0令牌授予流。简单来说就是一个API接口,向该API接口发送相关信息后,若通过微软标识平台的验证,则会返回访问令牌。

OAuth2.0令牌授予流有多种类型,这里只介绍两种最常用的,也是最方便操作的,其余类型可以自行浏览微软标识平台的官方文档。

资源所有者密码凭据授予

该方式需要使用账号密码来获取访问令牌,因此又称为主用户模式,没有密码或启用了多重身份验证(MFA)的账号则不能使用该方式。若使用该令牌授予流,需要给Azure应用添加委托的权限。

API接口:

Url:https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token

Method:POST
Content-Type: application/x-www-form-urlencoded

Request Body:
client_id=<client_id>
&scope=<scope_url>
&username=<user_account>
&password=<user_password>
&grant_type=password

参数说明:

参数说明
tenant可以使用Azure租户的ID或名称,也可以直接设置为 organizations
client_id所注册的Azure应用的应用程序(客户端)ID
grant_type必须设置为 password
user_account用户的电子邮件地址
user_password用户的密码
scope_url声明需使用的资源或服务,获取方式请参考上文

客户端密码凭据授予

使用应用的客户端密码来获取访问令牌,通常用于在后台运行而无需用户参与的守护程序,因此又称为服务主体模式。若使用该令牌授予流,需要给Azure应用添加应用程序权限。

API接口:

Url:https://login.microsoftonline.com/<tenant>/oauth2/v2.0/token

Method:POST
Content-Type: application/x-www-form-urlencoded

Request Body:
client_id=<client_id>
&scope=<scope_url>
&client_secret=<client_secret>
&grant_type=client_credentials

参数说明:

参数说明
tenant只可以使用Azure租户的ID或名称
client_id所注册的Azure应用的应用程序(客户端)ID
client_secret所注册的Azure应用的客户端密码
grant_type必须设置为 client_credentials
scope_url声明需使用的资源或服务,获取方式请参考上文

现成的脚本代码

上面介绍了Azure应用注册与获取访问令牌的方法或原理,主要涉及到API的调用与请求,若不熟悉API的相关知识,则阅读起来可能会稍微有一点技术门槛。因此下面直接给出PowerQuery与Python的两种现成实现代码,只需要注册Azure应用并填写相关参数即可,支持国际版与21世纪互联两个环境,并可选主用户模式或服务主体模式,可以自行选择其一。

此内容查看价格为10积分立即购买
登录后,购买的内容长期有效,不受时间限制。

总结

本篇文章介绍了Azure应用注册与访问令牌的获取方式,但可能忽略了部分细节,因此这里给出一些相关的官方文档链接以供参考。

[1] 什么是 Microsoft 标识平台?

[2] 权限和同意简介

[3] Microsoft 标识平台和 OAuth 2.0 客户端凭据流

[4] Microsoft 标识平台和 OAuth 2.0 资源所有者密码凭据

[5] Microsoft 身份验证库 (MSAL) 的概述

赞(0) 打赏
未经允许不得转载:夕枫 » Azure应用注册与访问令牌获取
订阅评论
提醒
guest
0 评论
最新
最久 最赞
内联反馈
查看所有评论

觉得文章有用的话就支持一下吧~

感谢您的打赏支持,我将持续输出有价值的内容!

支付宝扫一扫打赏

微信扫一扫打赏