本文所述方法已失效,以下内容仅为归档。(2023年12月)

非常简单: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论坛