我有一个常规的ASP .NET Web应用程序,我使用 App Services 部署到Azure中。部署之后,我启用了App Service身份验证并配置了Azure Active Directory。这使我可以发布我的Web应用程序并进行身份验证,因此只有属于Active Directory的人才能登录。
另一方面,我将ASP .NET Web API部署为 Cloud Service 。 Web应用程序应该加载一些调用Web API的信息(从SQL数据库加载一些数据并将其返回),然后在UI中显示信息。但是,当我调用API时,Azure Active Directory凭据不会从Web App传递到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的功能是完全错误的?
答案 0 :(得分:2)
根据说明,您可以在Azure上部署Web应用程序并使用Azure AD保护Web应用程序。
AFAIK,在这种情况下,无法将凭据传递给Web API。相应的解决方案,您应该使用Azure AD保护Web API(我们可以使用保护Web应用程序的相同应用程序)并获取Web API的access_token。然后,Web APP可以使用access_token调用Web API。
要配置easy auth以获取Web API的令牌,您可以参考this blog(步骤2:通过REST API更新App Service Auth Configuration)并将资源值替换为您使用的应用的APP ID保护Web API。要从网络应用获取access_token,您可以关注该博客的调用图谱API作为最终用户部分。
答案 1 :(得分:0)
1-从Web应用程序中读取.ASPX身份验证cookie
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
string authToken = authCookie.Value;
2-将cookie设置为httpclient。 cookie值必须具有相同的.ASPX身份验证cookie。
How do I set a cookie on HttpClient's HttpRequestMessage
3-使用HttpContext.Current.User.Identity.Name从web api读取用户名。
希望这有帮助。
答案 2 :(得分:0)
[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查询。
https://www.codeproject.com/Articles/568115/Sample-application-RavenDB-KnockoutJS-Bootstrap-We