-
Notifications
You must be signed in to change notification settings - Fork 8k
/
Scenario7_B2B.xaml.cs
103 lines (94 loc) · 4.05 KB
/
Scenario7_B2B.xaml.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the MIT License (MIT).
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Windows.Data.Json;
using Windows.Services.Store;
using Windows.UI.Xaml.Controls;
using Windows.Web.Http;
using Windows.Web.Http.Headers;
namespace SDKTemplate
{
/// <summary>
/// For more details on the business to business APIs, see:
/// https://msdn.microsoft.com/en-us/library/windows/apps/mt609002.aspx
/// </summary>
public sealed partial class Scenario7_B2B : Page
{
private MainPage rootPage = MainPage.Current;
private StoreContext storeContext = StoreContext.GetDefault();
// Note: "tenant", "clientId", "clientSecret" and "appIdUri" will need to be updated based on your particular
// Azure Active Directory configuration. See the README for more information.
// https://msdn.microsoft.com/en-us/library/azure/dn645542.aspx
readonly string tenantId = "00000000-0000-0000-0000-000000000000";
readonly string clientId = "00000000-0000-0000-0000-000000000000";
readonly string clientSecret = "00000000000000000000000000000000000000000000";
readonly string appIdUri = "https://contoso.onmicrosoft.com";
public Scenario7_B2B()
{
this.InitializeComponent();
}
private async void GetCustomerCollectionsId()
{
string aadToken = await GetTokenFromAzureOAuthAsync();
if (!String.IsNullOrEmpty(aadToken))
{
string id = await storeContext.GetCustomerCollectionsIdAsync(aadToken, "kim@example.com");
Output.Text = id;
if (String.IsNullOrEmpty(id))
{
rootPage.NotifyUser("GetCustomerCollectionsIdAsync failed.", NotifyType.ErrorMessage);
}
}
}
private async void GetCustomerPurchaseId()
{
String aadToken = await GetTokenFromAzureOAuthAsync();
if (!String.IsNullOrEmpty(aadToken))
{
string id = await storeContext.GetCustomerPurchaseIdAsync(aadToken, "kim@example.com");
Output.Text = id;
if (String.IsNullOrEmpty(id))
{
rootPage.NotifyUser("GetCustomerPurchaseIdAsync failed.", NotifyType.ErrorMessage);
}
}
}
private async Task<string> GetTokenFromAzureOAuthAsync()
{
var content = new HttpFormUrlEncodedContent(new Dictionary<string, string>
{
{ "grant_type", "client_credentials" },
{ "client_id", clientId },
{ "client_secret", clientSecret },
{ "resource", appIdUri },
});
content.Headers.ContentType = new HttpMediaTypeHeaderValue("application/x-www-form-urlencoded");
try
{
HttpClient client = new HttpClient();
HttpResponseMessage result = await client.PostAsync(
new Uri($"https://login.microsoftonline.com/{tenantId}/oauth2/token"), content);
string responseString = await result.Content.ReadAsStringAsync();
JsonValue response = JsonValue.Parse(responseString);
return response.GetObject().GetNamedString("access_token");
}
catch (Exception ex)
{
// Networking errors in PostAsync are reported as exceptions.
// JSON parsing errors are also reported as exceptions.
Output.Text = $"Failed to load Azure OAuth Token: {ex}";
return String.Empty;
}
}
}
}