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 应用程序。

AFAIK,在这种情况下,无法将凭据传递给 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。要从 Web 应用程序获取 access_token,您可以关注 以最终用户身份调用图形 API 该博客的部分。

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

相关文章:

c# - 如何从异步套接字切换到sslstream而不会造成性能损失?

c# - 如何在 C# 中捕获 Lua 异常

asp.net - 使用客户端标签链接到应用程序根目录

c# - App_Data 没有访问权限

c# - 如何向 Array.IndexOf 添加不区分大小写的选项

python - Azure 事件中心 Python SDK

c# - Visual C#中的命名空间错误

c# - 如何将元素添加到 List<T> 并取回索引?

sql - 在 Microsoft 流分析查询中选择 JSON 数组中的第一个元素

azure - 创建函数应用程序时出现错误 "scale operation is not allowed for this subscription in this region"