我有一个.Net Core 2.0 asp.net mvc Web应用程序。同样,我有一个.Net Standard 2.0单元测试项目。对于编写的单元测试,我必须调用受Azure AD保护的Web API。谁能让我知道如何从.net standard 2.0的单元测试项目中获得azure广告访问令牌。
.Net框架中有可能,因为它在“ Microsoft.IdentityModel.Clients.ActiveDirectory” dll中具有“ UserPasswordCredential”类。但此类已在.Net Standard 2.0(https://github.com/AzureAD/azure-activedirectory-library-for-dotnet/issues/482)中删除
答案 0 :(得分:0)
我在集成测试中使用了类似的方法:
string tokenUrl = _authority + "oauth2/token";
var req = new HttpRequestMessage(HttpMethod.Post, tokenUrl)
{
Content = new FormUrlEncodedContent(new Dictionary<string, string>
{
["grant_type"] = "password",
["client_id"] = settings.ClientId,
["client_secret"] = settings.ClientSecret,
["resource"] = _resourceUri,
["username"] = settings.UserName,
["password"] = settings.Password
})
};
HttpResponseMessage res = await _client.SendAsync(req);
string json = await res.Content.ReadAsStringAsync();
AadTokenResponse tokenResponse = JsonConvert.DeserializeObject<AadTokenResponse>(json);
有一些类级别的字段,例如AAD授权,API资源URI和HttpClient。
因此,这是使用“资源所有者密码凭证授予”流获取访问令牌的。 这是使用此流程实际上有意义的少数情况之一。 我们在没有登录窗口的情况下获取用户上下文中的访问令牌。 如果有更好的选择,则不应该使用此流程,在这种情况下,还要求用户没有联盟,没有MFA等。
您可能想要缓存令牌,这样就不会毫无意义地锤击测试中的令牌端点。