从 Microsoft Graph 获取具有委派权限的 ClientId 的访问令牌

问题描述 投票:0回答:1

我想使用高级 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未经授权。

azure azure-active-directory jwt microsoft-graph-api azure-app-registration
1个回答
0
投票

请注意,

Microsoft.Graph
PowerShell 模块不会直接公开访问令牌,它是专门为与 Microsoft Graph API 而非自定义 API 交互而设计的。

或者,利用 Az PowerShell 模块获取具有用户委托权限的自定义 API 的访问令牌。

最初,我在应用程序注册中公开了一个名为

MyData.FullControl.All
的新范围 API,如下所示:

enter image description here

确保在服务应用程序的授权客户端应用程序选项卡中添加Microsoft Azure PowerShell (1950a258-227b-4e31-a9cf-717495945fc2),如下所示:

enter image description here

现在,我在 Azure Cloud Shell 中运行了以下

Az
PowerShell 命令并成功获取了访问令牌,如下所示:

$tenantId = 'tenantId'  
Connect-AzAccount -Tenant $tenantId -UseDeviceAuthentication 
(Get-AzAccessToken -ResourceUrl "api://e32xxxxxxx").Token

回复:

enter image description here

为了确认这一点,您可以在 jwt.ms 网站中解码此令牌并检查

scp
声明:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.