当前位置: 首页 > 知识库问答 >
问题:

将凭据从Web应用传递到Web API。Azure AD身份验证

江浩慨
2023-03-14

我有一个普通的ASP。NET Web应用程序,我使用应用程序服务将其部署到Azure中。在部署它之后,我启用了应用程序服务身份验证并配置了Azure Active Directory。这使我能够发布我的Web应用程序,并具有身份验证,因此只有属于Active Directory的人员才能登录

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

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

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的函数完全错误了?

共有3个答案

曾鸿振
2023-03-14
[Authorize]
public IEnumerable<Object> Get()
{
 var owner = ObtainCurrentOwner();
 var assets = GetAssets(owner.Id);
 return result;
}

protected Owner ObtainCurrentOwner()
{
 return RavenSession.Query<Owner>().SingleOrDefault(x => 
           x.UserName == HttpContext.Current.User.Identity.Name);
}

public IEnumerable<Asset> GetAssets(int ownerID)
{
 return RavenSession.Query<Asset>().Where(x => x.OwnerId == ownerID);
}

此方法由[Authorize]属性修饰。这种机制以前在WCF中已知。ASP。NET检查此请求中的cookie,如果不存在cookie,则拒绝该请求。获取当前用户及其所有资产只需使用RavenSession进行两次LINQ查询,之前必须打开RavenSession。

https://www.codeproject.com/Articles/568115/Sample-application-RavenDB-KnockoutJS-Bootstrap-We

帅雅逸
2023-03-14

1-阅读文章。来自web应用程序的ASPX身份验证cookie

HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
string authToken = authCookie.Value;

2-将cookie设置为httpclient。cookie值必须具有相同的值。ASPX验证cookie。

如何在HttpClient的HttpRequestMessage上设置cookie

3-使用HttpContext从web api读取用户名。现在的使用者身份名称

希望这有帮助。

宫高义
2023-03-14

根据描述,您将在Azure上部署web应用,并使用Azure AD保护web应用。

另外,在这种情况下,不可能将凭证传递给web API。在相应的解决方案中,您应该使用Azure AD保护web API(我们可以使用保护web应用的相同应用程序),并获取web API的访问令牌。然后web应用程序可以使用access_令牌调用web API。

要配置轻松认证以获取Web API的令牌,您可以参考此博客(步骤2:通过REST API更新应用服务认证配置),并将资源值替换为您保护Web API的应用的应用程序ID。要从Web应用获取access_token,可以按照调用图形API作为该博客的终端用户部分。

 类似资料:
  • 我们有一个使用REST API的Web应用程序。RESTAPI基于环回并使用其内置的基于令牌的身份验证。对于Web应用程序,我们通过HTTPS使用基于表单的身份验证,因此用户必须输入其用户名和密码,然后我们使用这些用户名和密码通过POST/users/loginendpoint从REST API获取访问令牌。 我们的一位客户要求我们通过SAML 2.0和AD FS支持单点登录(SSO)身份验证。

  • 我对社交网络分析和twitter api是新手。我想收集关于特定主题的tweets。所以我写了下面的代码 在我的程序中,我需要在哪里提供凭据 谢谢

  • 问题内容: 我对HTTPS和HTTP身份验证凭据有疑问。 假设我使用HTTP身份验证来保护URL: 然后,我通过HTTPS从远程系统访问该URL,并在URL中传递凭据: https://gooduser:secretpassword@www.example.com/webcallback?foo=bar 用户名和密码会自动进行SSL加密吗?GET和POST是否一样?我很难用此信息来找到可靠的来源。

  • 问题内容: 实用程序类中有一个静态方法,该方法将从URL下载文件。已经设置了身份验证器,以便如果需要用户名和密码,则可以检索凭据。问题是,只要凭据有效,来自第一个成功连接的凭据将用于每个连接后缀。这是一个问题,因为我们的代码是多用户的,并且由于没有为每个连接检查凭据,所以没有适当凭据的用户可能会下载文件。 这是我们正在使用的代码 第一次下载文件时,我只从getPasswordAuthenticat

  • 有两个ASP.NET核心API,其中API A具有基本身份验证,API B具有windows身份验证。API A正在调用API B,但由于API B启用了windows身份验证,因此API A需要具有NTLM身份验证的。 API A(简体): 正如您在上面的代码片段中所看到的,我有一个,其用户为,但在API B中的调试器中,在声明转换代码中,我看到了my用户,该用户登录在Windows中,并在该帐