从第三方应用程序验证和显示受 Azure AD 保护的 Web 应用程序视图:第 2 部分
Authenticate and Show an Azure AD secured Web App View from an Third Party App: Part 2
概览
我从我之前的 到达这个 post。查看链接后,我明白我必须在 Azure AD 中将我的第三方应用程序注册为 Native Application
。所以这两个应用程序都在 Azure AD 中注册。
我已经在 Daemon or Server Application to Web API 应用程序类型和场景下创建了我的应用程序。
问题
在浏览了 Bruce Chen 提供的资源链接后,我能够构建我的代码来接收令牌;的确,我得到了一个令牌。但是,当我访问我打算显示的资源时,我看到抛出了用户名和密码提示。
我的工作
string aadInstance = "https://login.microsoftonline.com/{0}";
string tenant = "xxxx.onmicrosoft.com";
string clientId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
string todoListResourceId = @"https://xxxxx.azurewebsites.net/Customer/CashSummary?term=673130569-VN/00";
string todoListBaseAddress = @"https://graph.windows.net";
AuthenticationContext authContext = null;
AuthenticationResult result = null;
authContext = new AuthenticationContext(authority, new FileCache());
UserCredential uc = new UserPasswordCredential("xxxx@jkintranet.com", "xxxxxxxx");
try
{
// I am getting the Token here.
result = authContext.AcquireTokenAsync(todoListBaseAddress, clientId, uc).Result;
#region Call Web APP
//Here with the Token I am calling the MVC Web Resource View
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = httpClient.GetAsync(todoListResourceId).Result;
if (response.IsSuccessStatusCode)
{
// I am getting the response content as the Microsoft Identity Provider's User name and password Prompt instead of my MVC-View's HTML Content
string rezstring = response.Content.ReadAsStringAsync().Result;
var todoArray = JArray.Parse(rezstring);
Console.ForegroundColor = ConsoleColor.Green;
foreach (var todo in todoArray)
{
Console.WriteLine(todo["Title"]);
}
}
#endregion
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
return;
}
我的烦恼
Resource
在 AcquireTokenAsync
中;这里的Resource
是什么,是GraphAPI的URI还是APP ID的URI还是别的?
我使用了 Graph API 的 URI 并且能够成功获得令牌。
欣赏
@Bruce-Chen 以获得指导性解释。
资源应该是API的允许的观众。
这应该是您 API 的应用程序 ID URI,或者 API 的客户端 ID。
如果您指定 https://graph.windows.net
作为资源 URI,您将获得一个可以调用 Azure AD Graph API 的访问令牌,但不能调用您的 API。
概览
我从我之前的 Native Application
。所以这两个应用程序都在 Azure AD 中注册。
我已经在 Daemon or Server Application to Web API 应用程序类型和场景下创建了我的应用程序。
问题 在浏览了 Bruce Chen 提供的资源链接后,我能够构建我的代码来接收令牌;的确,我得到了一个令牌。但是,当我访问我打算显示的资源时,我看到抛出了用户名和密码提示。
我的工作
string aadInstance = "https://login.microsoftonline.com/{0}";
string tenant = "xxxx.onmicrosoft.com";
string clientId = "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tenant);
string todoListResourceId = @"https://xxxxx.azurewebsites.net/Customer/CashSummary?term=673130569-VN/00";
string todoListBaseAddress = @"https://graph.windows.net";
AuthenticationContext authContext = null;
AuthenticationResult result = null;
authContext = new AuthenticationContext(authority, new FileCache());
UserCredential uc = new UserPasswordCredential("xxxx@jkintranet.com", "xxxxxxxx");
try
{
// I am getting the Token here.
result = authContext.AcquireTokenAsync(todoListBaseAddress, clientId, uc).Result;
#region Call Web APP
//Here with the Token I am calling the MVC Web Resource View
HttpClient httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", result.AccessToken);
HttpResponseMessage response = httpClient.GetAsync(todoListResourceId).Result;
if (response.IsSuccessStatusCode)
{
// I am getting the response content as the Microsoft Identity Provider's User name and password Prompt instead of my MVC-View's HTML Content
string rezstring = response.Content.ReadAsStringAsync().Result;
var todoArray = JArray.Parse(rezstring);
Console.ForegroundColor = ConsoleColor.Green;
foreach (var todo in todoArray)
{
Console.WriteLine(todo["Title"]);
}
}
#endregion
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
return;
}
我的烦恼
Resource
在 AcquireTokenAsync
中;这里的Resource
是什么,是GraphAPI的URI还是APP ID的URI还是别的?
我使用了 Graph API 的 URI 并且能够成功获得令牌。
欣赏 @Bruce-Chen 以获得指导性解释。
资源应该是API的允许的观众。
这应该是您 API 的应用程序 ID URI,或者 API 的客户端 ID。
如果您指定 https://graph.windows.net
作为资源 URI,您将获得一个可以调用 Azure AD Graph API 的访问令牌,但不能调用您的 API。