众所周知,在 Microsoft Entra 管理中心直接设置,最长时限为24个月,也就是2年时间。如果要超过2年,网页上设置是无法直接实现的。这里给大家介绍两种方法,实现“百年密钥”,设置一次终生受用。
这两种方法来自于网上网友的提供,均验证可用。
方法一:使用 azure cli 注册应用、添加权限和密钥
1. 下载和安装 azure cli
或: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

CNBoy 四海部落










![Oracle Cloud 甲骨文云 瑞典斯德哥尔摩[ARM] 融合怪测评-CNBoy 四海部落](https://cnboy.org/wp-content/uploads/zhuanti-oracle-220x150.png)

