805 字
4 分钟
使用 Graph SDK 获取 OneDrive 自定义年限 Client Secret 的 API

前言#

通常情况下,我们都是直接在 Microsoft Azure 应用注册页面创建 OneDrive API。但是,通过网页界面创建的 API 密钥(Client Secret)最长有效期仅为 两年

如果是作为长期运行的服务(如 NAS 挂载、自动备份等),两年一换难免会因为忘记更新密钥而导致服务不可用。通过使用 Microsoft Graph PowerShell SDK,我们可以突破这个限制,自定义密钥的有效期(例如设置为 100 年),从而实现“永久”使用。


1. 安装 Graph SDK#

首先,需要在 PowerShell 中安装 Microsoft Graph 模块。请以管理员身份或当前用户身份运行 PowerShell 并执行以下命令:

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

2. 登录账号并获取权限#

安装完成后,需要登录你的微软账号并授予必要的权限以便通过命令行管理应用。

执行以下命令:

Terminal window
Connect-MgGraph -Scopes "Application.ReadWrite.All", "AppRoleAssignment.ReadWrite.All", "Directory.ReadWrite.All"
# 获取 Microsoft Graph 的服务主体引用
$graphSp = Get-MgServicePrincipal -Filter "displayName eq 'Microsoft Graph'"

注意:执行 Connect-MgGraph 后会弹出浏览器窗口,请登录你需要创建应用的微软账号并同意授权。

3. 配置并创建应用#

这是核心步骤。你可以根据需要修改下方的配置变量(如应用名称、密钥名称、有效期等)。将以下脚本复制到 PowerShell 中运行即可。

配置参数#

Terminal window
# === 基础配置 ===
$displayName = "rclone" # 注册应用服务名称
$secretDisplayName = "rclone-secret" # 密钥名称
$secretValidityYears = 100 # 期限,这里设置 100 年
$redirectUri = "http://localhost" # 重定向 URI
$signInAudience = "AzureADandPersonalMicrosoftAccount" # 受支持的帐户类型(个人+组织)
# === 权限定义 ===
# 委托权限 (Delegated Permissions)
$delegatedPermissions = @("User.Read", "Files.Read", "Files.ReadWrite", "offline_access")
# 应用程序权限 (Application Permissions)
$appPermissions = @("Files.Read.All", "Files.ReadWrite.All")

执行创建逻辑#

Terminal window
# === 查找权限 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
# === 创建客户端密码凭据 (Client Secret) ===
$startDate = Get-Date
$endDate = $startDate.AddYears($secretValidityYears)
$secret = Add-MgApplicationPassword -ApplicationId $app.Id -PasswordCredential @{
DisplayName = $secretDisplayName
StartDateTime = $startDate
EndDateTime = $endDate
}
# === 输出结果 ===
Write-Host "------------------------------------------------" -ForegroundColor Green
Write-Host "应用创建成功!" -ForegroundColor Green
Write-Host "应用名称 (Name): $displayName"
Write-Host "Application (client) ID: $($app.AppId)"
Write-Host "Client Secret: $($secret.SecretText)"
Write-Host "------------------------------------------------" -ForegroundColor Green
Write-Host "请立即保存 Client Secret,它只显示一次。" -ForegroundColor Yellow

4. 结语#

执行完上述脚本后,不出意外你应该已经成功获取到了 Client IDClient Secret

  • Client ID: 用于标识你的应用。
  • Client Secret: 有效期为你设置的年限(如 100 年)。

如何切换账号?#

如果你想为另一个账号创建 API,需要先注销当前登录,然后重复上述步骤:

Terminal window
# 注销当前登录
Disconnect-MgGraph

之后再次运行 Connect-MgGraph 即可登录新账号。

转载自:https://pbpz.net/2025/10/03/5.html

使用 Graph SDK 获取 OneDrive 自定义年限 Client Secret 的 API
https://blog.gckjoy.com/archives/onedrive-api/
作者
Echo of Joy
发布于
2025-11-27
许可协议
CC BY-NC-SA 4.0