c# - 将凭据从 Web 应用程序传递到 Web API。 Azure AD 身份验证

标签 c# asp.net azure azure-web-app-service azure-active-directory

我有一个常规 ASP .NET Web 应用程序,我使用应用服务将其部署到 Azure 中。部署后,我启用了应用服务身份验证并配置了 Azure Active Directory。这使我能够发布我的 Web 应用程序并进行身份验证,以便只有属于 Active Directory 的人员才能登录。

enter image description here

另一方面,我将 ASP .NET Web API 部署为云服务。 Web 应用程序应该加载一些调用 Web API 的信息(从 SQL 数据库加载一些数据并将其返回),然后将信息显示回 UI 中。但是,当我调用 API 时,Azure Active Directory 凭据不会从 Web 应用传递到 Web API。

下面是我在 Web 应用程序中调用 Web API 端点的一些代码。

public string GetStringAsync(string endPoint)
{
    HttpClientHandler handler = new HttpClientHandler
    {
        UseDefaultCredentials = true
    };
    handler.PreAuthenticate = true;
    using (HttpClient client = new HttpClient(handler))
    {
        return client.GetStringAsync(endPoint).Result;
    }
}

但是当我尝试在调用 API 时获取用户名时,我得到一个空字符串。以下是我为捕获调用 API 的身份所做的操作:

HttpContext.Current.User.Identity.Name;

如何在 Web 应用程序调用 Web API 时获取 Azure Active Directory 域\用户信息?可能我调用 API 的函数完全错误?

最佳答案

根据描述,您在 Azure 上部署 Web 应用程序并使用 Azure AD 保护 Web 应用程序。

据我所知,在这种情况下,无法将凭据传递给 Web API。相应的解决方案,您应该使用Azure AD保护Web API(我们可以使用保护Web应用程序的相同应用程序)并获取Web API的access_token。然后Web APP就可以使用access_token调用Web API。

要配置简单例份验证以获取Web API的 token ,您可以引用this blog (步骤 2:通过 REST API 更新应用程序服务身份验证配置)并将资源值替换为您保护 Web API 的应用程序的 APP ID。要从网络应用程序获取 access_token,您可以按照该博客的作为最终用户调用 Graph API 部分进行操作。

关于c# - 将凭据从 Web 应用程序传递到 Web API。 Azure AD 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45025350/

相关文章:

c# - GoToWebinar - 请求不是预期格式 - RestSharp

c# - 多个 Controller 端点之间的 Web Api 交互

java - 为 Azure 存储访问生成 SAS

c# - 如何将 WCF 服务添加到现有的 winforms 应用程序?

c# - 虚拟机上的 WMI 查询返回本地信息

c# - 在具有不同扩展 C# 的 ZipArchive 类中创建多个 ZipArchiveEntry

c# - LINQ select 查询总是产生真值

asp.net - 使用母版页在 ASP.NET 中通过 @ Page 指令设置页面标题

azure - F# Azure Function 的 Cosmos DB 绑定(bind)无法绑定(bind)

azure - 当Dynamics CRM用作接收器时如何在azure数据工厂中实现动态列映射