【问题标题】:Authorization to azure active directory through web api通过 web api 授权 azure 活动目录
【发布时间】:2019-01-15 08:21:52
【问题描述】:

我已经阅读了很多文档,但可能遗漏了一些东西。我想要做的是将用户名和密码传递给 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 clieant 中工作,但是当我将它移动到我的 WebAPI 应用程序时它给了我

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

这种方式无法从web api获取访问令牌吗?

【问题讨论】:

  • 可以,但需要手动操作,也有点危险。此外,用户帐户不能具有 MFA,也不能是联合用户/来宾。你的场景是什么,为什么要处理密码?
  • @juunas 这个想法是有一个客户端(比如,angular),它只调用 web api 方法,包括一个授权方法。这是个好主意吗?
  • 您的客户端应用程序应该通过 OpenId Connect 进行身份验证。为您的 API 获取访问令牌,调用它,然后如果它需要调用更多 API,则将该令牌交换为另一个令牌。 OIDC 舞蹈有点复杂,但它比自己处理密码安全得多(+ 阻止使用 MFA)。
  • @juunas 你的意思是在客户端通过 JavaScript 获取令牌?
  • 是的,使用 ADAL.JS 或 MSAL.JS,具体取决于您使用的是 v1 还是 v2 端点。

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


【解决方案1】:

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

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

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

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

【讨论】:

  • 我可以有一个本机应用程序(控制台),它给我令牌。我可以将它上传到 Azure 并以某种方式调用登录并传递以获取令牌吗?
  • @amplifier 为什么不直接对用户进行身份验证并获取令牌以在客户端应用程序中访问您的 Web api?如果你想交换访问令牌,你应该查看On-Behalf-Of flow/。另请参考 azure ad 中的身份验证场景:docs.microsoft.com/en-us/azure/active-directory/develop/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多