学习是一种乐趣~
分享是一种美德~

Office 注册应用之应用密钥有效期超长时限(2年以上)设置方法

众所周知,在 Microsoft Entra 管理中心直接设置,最长时限为24个月,也就是2年时间。如果要超过2年,网页上设置是无法直接实现的。这里给大家介绍两种方法,实现“百年密钥”,设置一次终生受用。

这两种方法来自于网上网友的提供,均验证可用。

 

方法一:使用 azure cli 注册应用、添加权限和密钥

1. 下载和安装 azure cli

https://learn.microsoft.com/en-us/cli/azure/install-azure-cli-windows?view=azure-cli-latest&tabs=azure-cli&pivots=msi

或:https://github.com/Azure/azure-cli/releases

2. 下载和解压配置文件 manifest.json

https://raw.githubusercontent.com/honorcnboy/BlogDatas/refs/heads/main/OfficeAppSecret/manifest.json

3. 打开 cmd 命令行窗口,导航之 manifest.json 所在目录,输入以下命令,在打开的浏览器中输入用户名和密码登录。

az login --allow-no-subscriptions

登录成功之后,网页将展示以下信息,关闭即可。

cmd 将出现以下类似信息

此处,记录tenantId(租户ID)信息"tenantId": "64d1f4d5xx-xxxxxx-xxxxx-xx88a3cba7"

4. 注册应用

在 cmd 执行以下命令

az ad app create --display-name Application --end-date 2099-12-31 --password ApplicationPassword --required-resource-accesses @manifest.json

其中:

Application:应用名。可自行修改;

2099-12-31:密钥截止时间。这里就是你设置百年密钥的地方,你可以设置个100年;

ApplicationPassword:应用密钥,也叫 secretid、客户端密码。大小写字母、数字、符号随机字符串,自行组合设置即可。

注册成功后,cmd 将显示应用相关信息(拉到最上面)

此处,记录appId(客户端ID)信息"appId": "25f63bxxx-xxxxxxxxx-xxx70c223"secretid(应用密钥)就是前面自行设置的字符串,也同时完成了设置。

5. 为应用程序授权

az ad app permission admin-consent --id xxxxxxxxx-xxxxxxxxx-xxxxxxxxx-xxxxxxxxx

xxxxxxxxx部分替换为前面记录下来的appId(客户端ID),然后执行

至此,所有设置全部完成。此过程中记录下来的tenantId(租户ID)secretid(应用密钥)appId(客户端ID),妥善保存。

 

方法二:使用 Graph SDK 注册应用、添加权限和密钥

以下所有命令均在在 PowerShell 执行

1. 安装 Graph SDK

Install-Module Microsoft.Graph -Scope CurrentUser -Force -AllowClobber

* 安装过程可能有点慢,请耐心等待

2. 执行以下命令,在弹出的窗口登录账号并授权服务

Connect-MgGraph -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All", "Directory.ReadWrite.All"

$graphSp = Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'"

* 第一次建议用管理员账号登录给授权,不然子账号没法登录使用程序

3. 根据自己的需要修改以下自定义信息自定义权限两部分信息,然后执行

# === 自定义信息 === 
$displayName = "rclone"    # 注册应用服务名称,可自定义
$secretDisplayName = "secret"    # 密钥名称,可自定义
$secretValidityYears = 100    # 期限,这里设置 100 年,可自定义
$redirectUri = "http://localhost"    # 重定向 URI,具体看使用的程序的说明,如果是 rclone 就不用修改
$signInAudience = "AzureADandPersonalMicrosoftAccount"    # 受支持的帐户类型,如果你不知道用来做什么,就不用修改

# === 自定义权限 ===
# 基本的读写权限,如有其他需求可自行修改
$delegatedPermissions = @("User.Read", "Files.Read", "Files.ReadWrite", "offline_access")
$appPermissions = @("Files.Read.All", "Files.ReadWrite.All") 

# === 查找权限 ID ===
$requiredDelegatedScopes = $graphSp.Oauth2PermissionScopes | Where-Object { $delegatedPermissions -contains $_.Value }
$requiredAppRoles = $graphSp.AppRoles | Where-Object { $appPermissions -contains $_.Value }

# === 构建权限结构 ===
$resourceAccessList = @()

$requiredDelegatedScopes | ForEach-Object {
    $resourceAccessList += @{
        Id = $_.Id
        Type = "Scope"
    }
}

$requiredAppRoles | ForEach-Object {
    $resourceAccessList += @{
        Id = $_.Id
        Type = "Role"
    }
}

$requiredResourceAccess = @(
    @{
        ResourceAppId = $graphSp.AppId
        ResourceAccess = $resourceAccessList
    }
)

# === 设置重定向 URI ===
$webRedirectUris = @($redirectUri)

# === 创建应用程序 ===
$app = New-MgApplication -DisplayName $displayName `
    -SignInAudience $signInAudience `
    -Web @{ RedirectUris = $webRedirectUris } `
    -RequiredResourceAccess $requiredResourceAccess

# === 创建服务主体 ===
$sp = New-MgServicePrincipal -AppId $app.AppId

# === 创建客户端密码凭据 ===
$startDate = Get-Date
$endDate = $startDate.AddYears($secretValidityYears)

$secret = Add-MgApplicationPassword -ApplicationId $app.Id -PasswordCredential @{
    DisplayName = $secretDisplayName
    StartDateTime = $startDate
    EndDateTime = $endDate
}

# === 输出信息 ===
Write-Host "应用名称: $displayName"
Write-Host "Application (client) ID: $($app.AppId)"
Write-Host "Client Secret: $($secret.SecretText)"

执行成功后,将输出以下内容

至此,Client ID(appId / 客户端ID)Client secret(secretid / 应用密钥)已经有了,记录好。然后登录管理中心网站,记录下tenantId(租户ID),并对API 进行授权。到此所有设置就全部完成了。

* 如想获取另一个账号的,则用以下命令注销登录再重复上面步骤即可

Disconnect-MgGraph

 

 

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
网站名称:CNBoy 四海部落
文章名称:《Office 注册应用之应用密钥有效期超长时限(2年以上)设置方法》
文章链接:https://cnboy.org/3392

本站资源仅供个人学习交流,不允许用于商业或违反国家法律法规之用途,否则法律问题自行承担。如有转载需注明文章来源。