我想使用高级 PowerShell 方法来获取 ClientId(应用程序注册)的授权,以使用我的 Azure 用户的委派权限访问范围。
我可以通过在
https://login.microsoftonline.com/$TenantId/oauth2/v2.0/devicecode
请求设备代码,然后在“https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token”请求令牌来手动执行此操作,就像在 我的其他问题中一样,但我更喜欢有更可靠的方法。
由于
MSAL.PS
模块自 2023 年起不再由 Microsoft 维护,我尝试了 Microsoft.Graph
模块:
$tenantId = '00000000-0000-0000-0000-000000000000'
$appId = '00000000-0000-0000-0000-000000000000'
$serviceId = '00000000-0000-0000-0000-000000000000'
Install-Module Microsoft.Graph -Scope CurrentUser -Repository PSGallery
$null = Connect-MgGraph `
-ClientId $appId -TenantId $tenantId `
-Scopes 'api://$serviceId/MyData.FullControl.All offline_access' `
-UseDeviceCode -NoWelcome
# print current context
Get-MgContext
$headers = @{
'Accept' = "application/json"
# 'Authorization' = "Bearer $sometoken" # can't get token from previous authentication
}
Invoke-MgGraphRequest -Method GET `
-Uri 'https:///my-service-endpoint.azurewebsites.net/api/data/01' `
-ContentType "application/json"
然而响应是401未经授权。
请注意,
Microsoft.Graph
PowerShell 模块不会直接公开访问令牌,它是专门为与 Microsoft Graph API 而非自定义 API 交互而设计的。
或者,利用 Az PowerShell 模块获取具有用户委托权限的自定义 API 的访问令牌。
最初,我在应用程序注册中公开了一个名为
MyData.FullControl.All
的新范围 API,如下所示:
确保在服务应用程序的授权客户端应用程序选项卡中添加Microsoft Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2),如下所示:
现在,我在 Azure Cloud Shell 中运行了以下
Az
PowerShell 命令并成功获取了访问令牌,如下所示:
$tenantId = 'tenantId'
Connect-AzAccount -Tenant $tenantId -UseDeviceAuthentication
(Get-AzAccessToken -ResourceUrl "api://e32xxxxxxx").Token
回复:
为了确认这一点,您可以在 jwt.ms 网站中解码此令牌并检查
scp
声明: