通过Web API授权激活活动目录

时间:2019-01-15 08:21:53

标签: c# asp.net-core asp.net-web-api2 authorization azure-active-directory

我已经阅读了许多文档,但可能错过了一些东西。我要做的是将用户名和密码传递给Web API,获得令牌作为响应,并使用它来访问Web API的其他安全部分(非交互式授权)

我发现只能与本机客户端(台式机,移动应用程序)一起使用

List<string> scopes = new List<string>()
{
    "https://mydomain.onmicrosoft.com/myapp/access-as_user"
};
string clientId = _azureAdOptions.Value.ClientId;
string aadInstance = "https://login.microsoftonline.com/{0}/v2.0";
string tanent = "organizations";
string authority = String.Format(CultureInfo.InvariantCulture, aadInstance, tanent);

var secureStringPass = new NetworkCredential("", pass).SecurePassword;
PublicClientApplication _app = new PublicClientApplication(clientId, authority);
var result = await _app.AcquireTokenByUsernamePasswordAsync(scopes, usr, secureStringPass);

上面的代码在natove中工作得很好,但是当我将其移至WebAPI应用程序时,它给了我

  

MsalServiceException:AADSTS70002:请求正文必须包含   以下参数:“ client_secret或client_assertion”

是否可以通过这种方式从Web api获取访问令牌?

1 个答案:

答案 0 :(得分:0)

正如@juunas所说,我们通常只使用来自受Azure AD保护的本机客户端的资源所有者流。机密客户端(例如网站)不能使用直接用户凭据。

有关如何使用ADAL .NET通过用户名/密码对用户进行身份验证的信息,请参阅this article。特别是Constraints & Limitations部分。

在SPA方案中,您可以使用Azure AD身份验证库(ADAL)对用户进行身份验证并获取访问令牌以访问Azure AD V1.0中的Web api。请单击here获取代码示例。

如果使用的是Azure AD v2.0终结点,则应使用Microsoft身份验证库(MSAL),请单击here获取代码示例。