Azure WVD Rest API 验证

Azure WVD Rest API Auth

我有一个正在编写的 aspnetcore 应用程序,希望能够管理 WVD 资源。我遇到的问题是,当我尝试

时,我从 Msal 获得的 Bearer 令牌给了我一个 401
GET https://rdweb.wvd.microsoft.com/api/feeddiscovery/webfeeddiscovery.aspx

我想也许我需要在 Azure 中为我的应用程序添加 API 权限,但我已经添加了:

https://management.azure.com/user_impersonation

而且我似乎找不到任何表明它可能适用于 WVD 的东西。

也许我偏离了轨道。

我试过查看来源:

https://github.com/Azure/RDS-Templates/tree/master/wvd-templates/wvd-management-ux/deploy

但是它已经被编译和缩小了,所以这被证明是困难的。

任何帮助获取有效令牌以调用 WVD Rest API 的帮助将不胜感激。

获取令牌:

完整代码(减去 Microsoft.Identity.Web 内容)

var token = await TokenAcquisition.GetAccessTokenOnBehalfOfUserAsync(new[] { "https://mrs-Prod.ame.gbl/mrs-RDInfra-prod/user_impersonation" });
            var httpClient = new HttpClient();
            httpClient.BaseAddress = new Uri("https://rdweb.wvd.microsoft.com/");
            httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", $"{token}");
            var result = await httpClient.GetAsync("api/hubdiscovery/eventhubdiscovery.aspx");
            result = await httpClient.GetAsync("api/feeddiscovery/webfeeddiscovery.aspx");

此方法来自Microsoft.Identity.Web project.

https://management.azure.com 用于 Azure Service Management API,在你的情况下,它是不正确的。

请在门户中导航到广告应用 -> API permissions -> APIs my organization uses -> 按 Windows Virtual Desktop 搜索,找到并点击。

如果您希望管理工具代表登录该工具的用户进行 Windows 虚拟桌面管理调用,请选择 Delegated permissions -> user_impersonation,完成以下步骤就像截图一样。也可以让用户自己同意,不用点击Grant admin consent按钮,就看你的了。

然后出现如下权限。

有关详细信息,请参阅此 Tutorial: Deploy a management tool and this step

更新:

尝试使用 powershell New-RdsRoleAssignment to add user account as a RDS Owner role, make sure you have installed the Microsoft.RDInfra.RDPowerShell module first, refer to this link.

Add-RdsAccount -DeploymentUrl "https://rdbroker.wvd.microsoft.com"
Get-RdsTenant
New-RdsRoleAssignment -RoleDefinitionName "RDS Owner" -SignInName "xxxx@xxxx.onmicrosoft.com" -TenantName "joywvd"

然后我运行再次执行Get-RdsTenant命令,用fiddler抓取请求,获取token,在https://jwt.io/解码,如下图[=34] =]

audscp应该和你的token是一样的,你也可以解码你的token来检查,然后我用postman调用https://rdweb.wvd.microsoft.com/api/feeddiscovery/webfeeddiscovery.aspx,就可以了。

天哪,我只是通过比较从 msft rdweb 应用程序获得的令牌来弄明白的:

来自 RDWeb 应用程序: "aud": "https://mrs-prod.ame.gbl/mrs-RDInfra-prod",

来自我的应用程序: "aud": "https://mrs-Prod.ame.gbl/mrs-RDInfra-prod",

..... 是的,我在 - mrs-Prod 中使用了大写 P。并且 msft 应用程序在 mrs-prod 中使用小写字母 p。

我同时感到惊讶、愤怒和兴奋。

为了记录,我在我的应用 api 权限屏幕中直接从 Azure 复制了我的值。