提问人:Gotcha 提问时间:11/7/2023 最后编辑:Gotcha 更新时间:11/7/2023 访问量:80
无法在桌面应用程序中获取 Microsoft 应用商店 ID
Cannot get Microsoft Store ID in the desktop application
问:
我已经做了相当多的研究,试验和错误,但我无法按照本教程中的描述获取Microsoft商店ID。https://learn.microsoft.com/en-us/windows/uwp/monetize/view-and-grant-products-from-a-service
我非常仔细地一步一步地完成了此操作,创建 azure 帐户、带有机密的应用程序,将 azure 帐户与合作伙伴中心的客户端应用相关联。
服务器和客户端应用程序都在 .NET 7 中,我能够使用以下代码获取 OAuth 令牌,其中资源 URI https://onestore.microsoft.com/b2b/keys/create/collections。
string oauthUrl = $"https://login.microsoftonline.com/{tenantId}/oauth2/token";
var builder = new UriBuilder(oauthUrl);
var values = new Dictionary<string, string> {
{ "grant_type", "client_credentials" },
{ "client_id", clientId },
{ "client_secret", clientSecret },
{ "resource", resourceUri },
};
using var content = new FormUrlEncodedContent(values);
using var response = await httpClient.PostAsync(builder.ToString(), content);
我确实收到了具有以下结构的成功响应。
{
"token_type": "Bearer",
"expires_in": "3600",
"expires_on": "1460404526",
"resource": "https://service.contoso.com/",
"access_token": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ik5HVEZ2ZEstZnl0aEV1THdqcHdBSk9NOW4tQSJ9.eyJhdWQiOiJodHRwczovL3NlcnZpY2UuY29udG9zby5jb20vIiwiaXNzIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvN2ZlODE0NDctZGE1Ny00Mzg1LWJlY2ItNmRlNTdmMjE0NzdlLyIsImlhdCI6MTM4ODQ0MDg2MywibmJmIjoxMzg4NDQwODYzLCJleHAiOjEzODg0NDQ3NjMsInZlciI6IjEuMCIsInRpZCI6IjdmZTgxNDQ3LWRhNTctNDM4NS1iZWNiLTZkZTU3ZjIxNDc3ZSIsIm9pZCI6IjY4Mzg5YWUyLTYyZmEtNGIxOC05MWZlLTUzZGQxMDlkNzRmNSIsInVwbiI6ImZyYW5rbUBjb250b3NvLmNvbSIsInVuaXF1ZV9uYW1lIjoiZnJhbmttQGNvbnRvc28uY29tIiwic3ViIjoiZGVOcUlqOUlPRTlQV0pXYkhzZnRYdDJFYWJQVmwwQ2o4UUFtZWZSTFY5OCIsImZhbWlseV9uYW1lIjoiTWlsbGVyIiwiZ2l2ZW5fbmFtZSI6IkZyYW5rIiwiYXBwaWQiOiIyZDRkMTFhMi1mODE0LTQ2YTctODkwYS0yNzRhNzJhNzMwOWUiLCJhcHBpZGFjciI6IjAiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJhY3IiOiIxIn0.JZw8jC0gptZxVC-7l5sFkdnJgP3_tRjeQEPgUn28XctVe3QqmheLZw7QVZDPCyGycDWBaqy7FLpSekET_BftDkewRhyHk9FW_KeEz0ch2c3i08NGNDbr6XYGVayNuSesYk5Aw_p3ICRlUV1bqEwk-Jkzs9EEkQg4hbefqJS6yS1HoV_2EsEhpd_wCQpxK89WPs3hLYZETRJtG5kvCCEOvSHXmDE6eTHGTnEgsIk--UlPe275Dvou4gEAwLofhLDQbMSjnlV5VLsjimNBVcSRFShoxmQwBJR_b2011Y5IuD6St5zPnzruBbZYkGNurQK63TJPWmRd3mbJsGM0mf3CUQ",
"refresh_token": "AwABAAAAv YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfcUl4VBbiSHZyd1NVZG5QTIOcbObu3qnLutbpadZGAxqjIbMkQ2bQS09fTrjMBtDE3D6kSMIodpCecoANon9b0LATkpitimVCrl PM1KaPlrEqdFSBzjqfTGAMxZGUTdM0t4B4rTfgV29ghDOHRc2B-C_hHeJaJICqjZ3mY2b_YNqmf9SoAylD1PycGCB90xzZeEDg6oBzOIPfYsbDWNf621pKo2Q3GGTHYlmNfwoc-OlrxK69hkha2CF12azM_NYhgO668yfmVCrl-NyfN3oyG4ZCWu18M9-vEou4Sq-1oMDzExgAf61noxzkNiaTecM-Ve5cq6wHqYQjfV9DOz4lbceuYCAA"
}
我从响应中获取access_token值,并将其作为 GetCustomerCollectionsIdAsync 中的 serviceTicket 发送到我的客户端应用程序。
WinRT.Interop.InitializeWithWindow.Initialize(_context, platformHandle.Handle);
var collectionsId = await _context.GetCustomerCollectionsIdAsync(serviceTicket, publisherUserId);
结果是空字符串,没有任何错误,所以我不知道该往哪里看。
我试图洗牌参数,传递null或空字符串,但没有任何效果。我尝试了从 10.0.17763 到 10.0.22000 的不同 Windows SDK 版本。在 Azure 门户中,我找到了不同版本的 OAuth 令牌 v2,我认为它是原始终结点的继任者,只是缺少文档。
https://learn.microsoft.com/en-us/entra/identity-platform/v2-oauth2-auth-code-flow
string oauthUrl = $"https://login.microsoftonline.com/{tenantId}/oauth2/v2.0/token";
var builder = new UriBuilder(oauthUrl);
var values = new Dictionary<string, string> {
{ "grant_type", "client_credentials" },
{ "client_id", clientId },
{ "client_secret", clientSecret },
{ "scope", $"{resourceUri}/.default" },
};
结果是一样的 - 我确实得到了令牌,但客户端 API 返回空字符串。我真的不知道该往哪里看 - 这可能只是清单或合作伙伴帐户设置中的一个小调整,但我已经重新检查了很多次。
任何想法如何找出错误的原因?
答: 暂无答案
评论