Asp.net web api web api与Azure AD的集成测试
我正在开发一个受Azure Active Directory保护的webapi Web服务。基于登录的用户,Web服务与Office 365(SharePoint/Yammer)密切相关 为了测试web api端点,我正在编写一个控制台应用程序,让我使用AAD凭据登录,然后调用端点。它可以工作,但是正在寻找一些东西来取代这种测试web api的方法。如果它更具可重复性,而且我不必每次都填写凭证,那就太好了。我正在寻找一个单元测试项目,但无法让Azure广告登录工作Asp.net web api web api与Azure AD的集成测试,asp.net-web-api,integration-testing,azure-active-directory,Asp.net Web Api,Integration Testing,Azure Active Directory,我正在开发一个受Azure Active Directory保护的webapi Web服务。基于登录的用户,Web服务与Office 365(SharePoint/Yammer)密切相关 为了测试web api端点,我正在编写一个控制台应用程序,让我使用AAD凭据登录,然后调用端点。它可以工作,但是正在寻找一些东西来取代这种测试web api的方法。如果它更具可重复性,而且我不必每次都填写凭证,那就太好了。我正在寻找一个单元测试项目,但无法让Azure广告登录工作 有什么建议可以让这更简单吗 最
有什么建议可以让这更简单吗 最简单的方法是将测试运行程序定义为Azure AD中的应用程序,并让它使用自己的客户端id和密码调用API 要做到这一点,您需要做以下几件事:
approvles
添加到Azure AD中的API清单中。这些是应用程序权限 static void Main(string[] args)
{
test().Wait();
}
public static async Task test()
{
using (HttpClient client = new HttpClient())
{
var tokenEndpoint = @"https://login.windows.net/a703965c-e057-4bf6-bf74-1d7d82964996/oauth2/token";
var accept = "application/json";
client.DefaultRequestHeaders.Add("Accept", accept);
string postBody = @"resource=https%3A%2F%2Fgraph.microsoft.com%2F //here could be your own web api
&client_id=<client id>
&grant_type=password
&username=nanyu@xxxxxxx.onmicrosoft.com
&password=<password>
&scope=openid";
using (var response = await client.PostAsync(tokenEndpoint, new StringContent(postBody, Encoding.UTF8, "application/x-www-form-urlencoded")))
{
if (response.IsSuccessStatusCode)
{
var jsonresult = JObject.Parse(await response.Content.ReadAsStringAsync());
var token = (string)jsonresult["access_token"];
}
}
}
}
static void Main(字符串[]args)
{
test().Wait();
}
公共静态异步任务测试()
{
使用(HttpClient=new HttpClient())
{
var tokenpoint=@”https://login.windows.net/a703965c-e057-4bf6-bf74-1d7d82964996/oauth2/token";
var accept=“application/json”;
client.DefaultRequestHeaders.Add(“接受”,接受);
string postBody=@“resource=https%3A%2F%2Fgraph.microsoft.com%2F//这里可能是您自己的web api
&客户识别码=
&授权类型=密码
&用户名=nanyu@xxxxxxx.onmicrosoft.com
&密码=
&范围=openid”;
使用(var response=wait client.PostAsync(令牌端点,新的StringContent(postBody,Encoding.UTF8,“application/x-www-form-urlencoded”))
{
if(响应。IsSuccessStatusCode)
{
var jsonresult=JObject.Parse(wait response.Content.ReadAsStringAsync());
var token=(字符串)jsonresult[“访问令牌”];
}
}
}
}
但问题是,flow将直接在代码中暴露用户名和密码,这也带来了潜在的攻击风险,我们将始终避免直接处理用户凭据。因此,请确保在安全环境中使用此流进行测试。你可以参考更多的细节。我不这么认为;他要工作了。我不得不更加强调这一点,但SharePoint似乎不接受应用程序身份验证方法;是的,如果您必须代表用户拨打电话,那么唯一的选择就是创建一个用户帐户进行测试。如果您选择此路线,请务必阅读Vittorio关于此流程限制的博客文章: