从第三方应用程序验证和显示受 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;
                }

The Resource

我的烦恼

ResourceAcquireTokenAsync 中;这里的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。