0

我有一个我正在编写的 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 项目。

4

2 回答 2

1

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

请导航到门户中的 AD 应用程序 -> API permissions-> APIs my organization uses-> 搜索Windows Virtual Desktop,找到并单击。

在此处输入图像描述

如果您希望管理工具代表已登录该工具的用户进行 Windows 虚拟桌面管理调用,请选择Delegated permissions-> user_impersonation,完成屏幕截图中的步骤。您也可以让用户自己同意权限而不点击Grant admin consent按钮,这取决于您。

在此处输入图像描述

然后权限如下所示。

在此处输入图像描述

有关更多详细信息,请参阅本教程:部署管理工具和此步骤

更新:

尝试使用 powershellNew-RdsRoleAssignment将用户帐户添加为RDS Owner角色,请确保您已经安装了Microsoft.RDInfra.RDPowerShell模块,参考此链接

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 捕获请求,获取令牌,在https://jwt.io/中解码,如下所示。

在此处输入图像描述

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

在此处输入图像描述

于 2020-01-01T03:08:40.503 回答
0

天哪,我只是通过比较从 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 复制了我的值。

于 2020-01-04T17:47:32.130 回答