非常简单:Graph 浏览器生成

微软禁止了对应请求的发送,此方法已失效。

  • 优点:步骤非常简单,不用下载任何文件,可以在原应用基础上创建新密码。
  • 缺点:Graph 浏览器需要全剧管理员授予API权限,因此只有全局管理员账号或管理员事先已授权才能采用此法。

Graph 浏览器(Graph Explorer)是微软官方的API在线调试工具。文档地址:https://docs.microsoft.com/zh-CN/graph/api/overview?view=graph-rest-1.0

步骤

  1. 注册应用后,在概述页面复制应用的对象ID

  2. 打开Graph 浏览器,登录账号。

  3. 请求类型改为POST,版本为1.0不变,右边的请求所使用的HTTP方法改为https://graph.microsoft.com/v1.0/applications/{对象id}/addPassword

  4. 给予Graph浏览器权限,在修改权限(预览版)中,打开权限面板,授予许可Application.ReadWrite.AllDirectory.AccessAsUser.All权限,如果事先授予过了就不用管。

  5. 运行查询,如果成功,在响应预览可以看到secretText,就是我们想要的客户端密码了。

  6. 回到Azure Active Directory的对应应用界面,看到新增了客户端密码,表示成功。

简单:Azure CLI或Azure Cloud Shell命令生成

  • 优点:步骤简单,不借助第三方工具。
  • 缺点:命令行界面,不能在原有应用上新增密钥,需要管理员权限。

步骤

如果有Azure订阅可以直接使用Azure Cloud Shell,没有Azure订阅需要下载安装Azure CLI,Azure CLI可以安装在 Windows、macOS 和 Linux 环境中,安装方式可参考官方文档

  1. 使用如下命令登录。必须要有 --allow-no-subscriptions
az login --allow-no-subscriptions
  1. 使用如下命令创建应用:
az ad app create --display-name office-api --end-date 2077-07-07 --password 1234s8yge4se5gh --required-resource-accesses "[{'resourceAccess': [{'id': '19dbc75e-c2e2-444c-a770-ec69d8559fc7','type': 'Role'},{'id': '741f803b-c850-494e-b5df-cde7c675a1ca','type': 'Role'}],'resourceAppId': '00000003-0000-0000-c000-000000000000'}]"

--display-name 是此次创建应用的显示名称, --end-date 是 API 到期时间,格式 YYYY-MM-DD, --password 就是 客户端密码(client secret), --required-resource-accesses 代表 API 拥有的权限,这里授予了 Directory.ReadWrite.AllUser.ReadWrite.All 两个权限。 appId 就是 应用程序(客户端) ID
(client id) ,后面要用到,odata.metadata 里面包含了 对象 ID(tenant id)。

  1. 如果是管理员,可用如下命令给予管理员同意。
    az ad app permission admin-consent --id appId
    之后会生成一个新的应用程序ID以替换之前生成的。

  2. 回到Azure Active Directory网页版的对应应用界面,看到新增了客户端密码,表示成功。

中等:使用Chrome扩展TamperDev修改HTTPS请求

我的浏览器不兼容这个扩展,没法复刻,只能借用原文图片了。(原文见参考资料)

步骤

  1. 安装[TamperDev]扩展,并开启扩展程序的拦截功能。

  2. 进入Azure Active Directory的对应应用界面,打开添加新客户端密码选项页面。

  3. 打开TamperDev扩展界面,扩展会捕捉请求,可以看到即将提交的请求,修改endDateTime字段。

  4. 点击橙色按钮发送请求,随后立即点击取消停止TamperDev的调试,,否则可能会出现error 1错误。

复杂:使用Fiddler修改HTTPS请求

  • 优点:无需任何权限。
  • 缺点:需要两个软件,且操作不容易理解。

步骤

  1. 下载Fiddler软件。点此下载

  2. 打开Fiddler的选项界面(菜单ToolsOptions),勾选HTTPS下的Capture HTTPS CONNECTsDecrypt HTTPS Traffic,会弹出安装证书要求,点击同意。不同意的可以不用看了

  3. 安装Chrome扩展程序Proxy SwitchyOmega

  4. 在扩展界面,新建一个名为Fidder的情景模式,设置如下图所示。然后应用选项。

  5. 打开Azure Active Directory对应页面,切换到Fidder代理,网页会刷新一次。

  6. 先随意创建一个客户端密码,说明、有效期随便写。

  7. 在Fidder中找到刚刚提交的创建新客户端密码请求,右击请求在菜单中选择ReplayReissue from Composer,在Composer下的Parsed修改Request Bodydisplayname(说明)和endDateTime(截止时间)字段,点击右上方Excute执行。

  8. 一会Fidder就会出现类似的请求,这就是我们修改后的请求。查看修改的请求,在*Inspectors下方JSON选项卡*中有应用的客户端密码,复制并保存。

  9. 回到Azure Active Directory网页版的对应应用界面,看到新增了客户端密码,表示成功。

实际上使用类似能捕捉和修改HTTPS请求的软件都可以实现。

参考资料

修改应用密钥有效期之 Chrome 扩展 TamperDev 篇. 1ove论坛