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");
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] =]
aud
和scp
应该和你的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 复制了我的值。
我有一个正在编写的 aspnetcore 应用程序,希望能够管理 WVD 资源。我遇到的问题是,当我尝试
时,我从 Msal 获得的 Bearer 令牌给了我一个 401GET 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");
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] =]
aud
和scp
应该和你的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 复制了我的值。