如何通过 PHP 获取 Azure Active Directory 令牌
在调用 Azure Rest API 时,如果是属于 Azure Resource Manager 的 API,则需要使用 Azure Active Directory (Azure AD)认证获取令牌(Token),然后才能够进行访问。
以下是创建 Azure AD 应用,并授权其可以访问管理 Azure 的资源的步骤:
获取更好的阅读体验也可以点击此处。
Note
以下认证方式,只适用于 Azure Resource Manager 的 API。 即 endpoint 为 management.chinacloudapi.cn 的 API,不适用于 Azure Service Manager 的 API(endpoint 为 management.core.chinacloudapi.cn 的 API)。
登录 Azure 账户(PowerShell)

记录获取到的 TenantID 以供后续程序使用。
选择当前订阅 ID
设置当前订阅,多订阅环境下需要执行该步骤 :
Set-AzureRmContext -SubscriptionId <subscription ID>
创建 AD 应用
查看新创建的应用对象,属性 ApplicationId,在后续会用来创建服务凭证,角色设置和 Access Token。
$azureAdApplication = New-AzureRmADApplication -DisplayName "exampleapp" -HomePage "https://www.contoso.org" -IdentifierUris "https://www.contoso.org/example" -Password "<Your_Password>"

创建服务凭证
Azure AD 应用创建服务凭证:
New-AzureRmADServicePrincipal -ApplicationId $azureAdApplication.ApplicationId

当创建完成服务凭证后,初始是没有任何权限的,我们需要为其设置权限范围。
授权
为您的服务凭证添加角色设置,在该例中,为您的服务凭证设置访问您订阅下所有资源的读权限。 如果想了解更多内容,请参考:Azure Role-based Access Control。
New-AzureRmRoleAssignment -RoleDefinitionName Contributor -ServicePrincipalName $azureAdApplication.ApplicationId
其中 RoleDefinitionName 有三种权限设置:
- Reader 对Azure资源有读取权限。
- Contributor 对Azure资源有管理权限,但无法授权他人。
- Owner 对Azure资源拥有管理权限,也可以授权他人管理。

调用 Oauth2 API 获取 Token
这样 Azure AD Application 就创建完成了,我们可以使用以下三个信息,来获取认证的 Token。
- telent-id 对应订阅信息上使用的 telentID。
- application-id 创建应用返回的 ApplicationID。
- app password 创建应用时填写的密码。
获取 Token 的方式,使用 Azure login oauth2 的认证接口,如果想了解更多,请参考此文档:Using the Azure Resource Manager REST API。
请参考以下代码:
$tenlent_id = 'Your Sub Tenlent ID';
$client_id = 'Application ID';
$client_secret = 'Application Password'; $auth_url = 'https://login.chinacloudapi.cn/'.$tenlent_id.'/oauth2/token?api-version=1.0';
$auth = curl_init($auth_url);
$post_data= 'grant_type=client_credentials&resource=https://management.chinacloudapi.cn/&client_id='.$client_id.'&client_secret='.urlencode($client_secret); curl_setopt_array($auth, array(
CURLOPT_VERBOSE => 1,
CURLOPT_POST => 1,
CURLOPT_POSTFIELDS => $post_data,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => array(
'Content-Type: application/x-www-form-urlencoded'
)
));
curl_exec($atuh);
echo "\n";
执行查询后会得到 Token 数据, access_token 即为访问 Token。
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1455680701",
"not_before": "1455676801",
"resource": "https://management.azure.com/",
"access_token": "eyJ0eXAiOi…"
}
然后将您要访问的 API 请求头上加上 Authorization 的 Header 设置,并将其值设置为:

Token 之前要加上 Bearer。
调用示例:
$token = 'eyJ0eXA…';
$host = 'management.chinacloudapi.cn';
$version = '2015-09-01';
$url = 'https://'.$host.'/subscriptions/5bbf0cbb-647d-4bd8-b4e6-26629f109bd7/resourceGroups/Default-MySql-ChinaNorth/providers/Microsoft.MySql/servers/poddbtest/databases/kevintest?api-version='.$version;
$ch = curl_init($url);
$data = array(
'properties' => array(
'charset' => 'utf8',
'collation' => 'utf8_general_ci'
),
);
$json = json_encode($data); curl_setopt_array($ch, array(
CURLOPT_VERBOSE => 1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS => $json,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_HTTPHEADER => array(
'Content-type:application/json',
'Authorization:Bearer '.$token
)
)); $ret =curl_exec($ch);
if (empty($ret)) {
// some kind of an error happened
echo 'Curl error: ' . curl_error($ch);
} else {
$info = curl_getinfo($ch);
}
echo "\n";
如何通过 PHP 获取 Azure Active Directory 令牌的更多相关文章
- Nodejs获取Azure Active Directory AccessToken
因为现有的代码已经迁入至Azure中,并且受AD保护,所以在获取数据时,需要传入Token后才可以获取到数据,那么第一步肯定是需要先提取到token var adal = require('adal- ...
- 【Azure Developer】使用 adal4j(Azure Active Directory authentication library for Java)如何来获取Token呢
问题描述 使用中国区的Azure,在获取Token时候,参考了 adal4j的代码,在官方文档中,发现了如下的片段代码: ExecutorService service = Executors.new ...
- 移动服务和 Azure Active Directory 中基于角色的访问控制
编辑人员注释:本文章由 Matthew Henderson撰写 去年 11月,我们发布了 Azure Active Directory (AAD) 预览版作为移动服务身份提供程序.此举旨在为企业开 ...
- 如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用
如何使用 Azure Active Directory 认证和 Microsoft Graph 构建 Blazor Web 应用 英文原文:https://developer.microsoft.co ...
- 简化 Web 应用程序与 Windows Azure Active Directory、ASP.NET 和 Visual Studio 的集成
大家好! 今天的博文深入讨论我们今天推出的开发人员工具和框架中的一些新功能.我们通过与 ASP.NET 和 Visual Studio 团队合作开发了一些重大的增强功能,让开发人员能够轻松使用 Win ...
- 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览
除经济优势之外,云计算还在可转化为竞争优势的应用程序开发方面提供了更大的灵活性.我们很高兴看到每天创建的新 Windows Azure 订阅超过 1000 个,更令人兴奋的是,有一半客户使用价值更高的 ...
- 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集
Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...
- 哪些工具能有效管理Azure Active Directory?
[TechTarget中国原创] 管理Azure Active Directory有四种常见的工具:Azure Web门户.Azure PowerShell.Azure命令行接口和Azure Mana ...
- SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理——深入的话需要去折腾Azure Active Directory
SRV记录 SRV记录 什么情况下会用到SRV记录? [SRV记录用来标识某台服务器使用了某个服务,常见于微软系统的目录管理] SRV记录的添加方式 A.主机记录处格式为:服务的名字.协议的类型 例如 ...
随机推荐
- 《Beginning Java 7》 - 1 - Initializer 初始化器
Initializer 分两类:class initializer 类初始化器 instance initializer 实例初始化器 1. class initializer,在编译时运行,通过 ...
- 4.Python的版本
Python2: 英文支持没问题,中文报错,默认编码:ascii码 显示中午需要添加代码在首行:# -*- encoding:utf -8 -*- 用户交互 raw_input python2 里还 ...
- jQuery阻止默认行为
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF- ...
- 在iOS7中修改键盘Return键的类型
今天将之前运行在iOS7之前的一段代码拿出来,在iOS7的机器上运行,发现键盘上的ReturnKeyType不能被修改了. 经过几番查找资料,了解到iOS7中UISearchBar的结构发生了变化,将 ...
- HTML-文本域属性设置
1.设置文本域的字体 <TEXTAREA STYLE="font-size:9pt;font-family:verdana;color:#333333">输入内容< ...
- Eclipse Alt + / 快捷键失效
需要重新设置快捷键.按快捷键ctrl+shirt+L,然后在按一下L.设置快捷键的对话框就出来了,然你将Word Completion移除,在将Content Assist 这个设置为alt+/.就可 ...
- 认识CSS中css引入方式、选择器、文本样式设置以及显示模式
前端之HTML.CSS(三) CSS CSS-Cascading Styles Sheets,层叠样式表.用于网页的表现,主要用于布局和修饰网页. CSS引入方式 CSS的三种引入方式:行内样式,内部 ...
- Locust HTTP client
Http client 默认是以安全模式运行的,任何由于连接错误.超时或者类似错误引起的异常,都会返回一个空的Response对象,这个请求将会再locust统计中标记为failure,返回的虚拟对象 ...
- js从后台取值并绑定到元素上
用ajax从后台取值不是什么有技术含量的活计,把后台取来的值绑定到Vue对象上也不算难,但每一次向后台拿数据的时候都得写上这么一段代码就十分痛苦了. 于是我写了这么一小段js代码,能够自己根据url去 ...
- JAVA学习6:用Maven创建Spring3 MVC项目
一. 环境 spring-framework-3.2.4.RELEASE jdk1.7.0_11 Maven3.0.5 eclipse-jee-juno-SR2-win32 二. ...