Azure active directory 获得访问的 token
一直认为 Azure 的设计过于复杂,权限要求过多,就感觉是一群技术宅做的系统。相对 AWS 来说,更加喜欢 AWS 的功能设计。
但是因为工作需要又不得不使用 Azure,所以把使用过程中遇到的一些问题都记录下来,以期望能帮助有需要的人。
这篇文章主要用于介绍如何使用 postman 来获得 Azure active directory 的用户访问 token,这个步骤是使用 Azure 对用户鉴权使用的第一步。
确定 tenant
Azure 允许你有多个 tenant,你可以在 Azure 的控制台中对 tenant 进行切换,这个是你需要做的第一步。确定你希望使用的 teant。
如果你还没有 tenant 的话,你需要创建一个 tenant。
当找到你需要的 Tenant 以后,你会获得一个 tenant ID,这个非常重要。
因为这个表示的是你 AD 的唯一标识,所以你需要记录下来。
Tenant ID 在你界面中的的 Tenant Information 里面
注册 APP
不管你使用任何类型的应用,你都需要先注册一个 APP。
单击左侧的注册 APP 按钮。
可以单击界面的上侧,注册一个新的应用。
在弹出的界面中,输入注册需要的相关信息。
注册的名字你可以自行定义,需要注意的是,你需要选择:
- Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)
这个注册选项。
假设,我们这里注册的应用是 WEB。
获得基本参数
当你注册成功后,你可以单击你的注册名,然后你将会看到注册的应用信息界面。
在这个界面中,你会得到
- Application (client) ID
- Directory (tenant) ID
- Object ID
这几个参数,这几个参数对你来说非常重要,你需要保存下来。
设置 secrets
单击左侧的 Certificates & secrets,你将会看到密钥生成的界面。
在这里,你可以单击生成一个新的 Secret。
你可以不用给这个 secret 进行命名,你也可以命名你希望的名字。请注意将 secret 进行保存,因为下次你访问的时候,secret 就不会再显示了。
API 赋权
你需要确定 Microsoft Graph 有用户读取的权限。
如果没有这个权限的话,你需要单击上面的添加权限来将权限添加进来。
选择 Microsoft Graph 的选项,然后将用户的权限添加进来。
暴露 API
你需要将你的 API 进行暴露,允许进行访问。
你需要添加一个新的 Scope,在这里我们假设你添加了一个叫做 user.read 的 scope。
在弹出的界面中你可以输入你需要的选项。
你可以选择 Admins and users
修改 Manifest
这个配置参数你需要手动修改。
主要修改参数是:oauth2AllowImplicitFlow 修改为 true
至此,Azure 的配置已经完成了,下一步就是配置你的客户端进行测试了。
Postman 测试
可以通过 Postman 进行测试获得 token。
你有 2 种方法进行测试,我们测试的是不通过授权,直接通过 secret 来获得 token。
另一种方法,我们在其他方式中再进行测试。
在 Postman 中添加一个 API 访问。
访问方法
使用 GET 进行访问
访问 URL
访问的 URL 是:https://login.microsoftonline.com/tenant ID/oauth2/v2.0/token
这里有一个参数要进行替换,就是 Tenant ID,这个 ID 在开始的时候就用于标识一个 AD,我们已经在前面的步骤保存了。
Headers
添加参数 Content-Type 为 application/x-www-form-urlencoded
Body
grant_type : client_credentials
client_id: 4ab1a0b7-da1d-423d-9fc3-e3a6fabd9
client_secret:SYk.HZT_jK6ZE1~3tle2Ha0MeV.9
scope: api://4ab1a0b7-da1d-423d-9fc3-e3a6fabd9/.default
这里参数有一根需要注意的地方。
client_id 是我们在最开始的时候 APP 创建成功后获得 client_id。
client_secret 是我们我们在 APP 注册成功后,创建的秘钥。
scope:是我们创建的的 scop,但是需要注意的是,我们创建的 scope 是以 user.read 结尾的,在我们获得 token 的时候,不能使用上面结尾的 scope,而需要将 user.read 修改为 .default
因此 scope 的配置就是 api://client_id/ .default.
请注意,你一定要这么配置,否则你拿不到 token
当一切配置好后,你可以发送请求,如果一切正确的话,你将会看到服务器返回给你的 token 字符串。