通过 web api 对 azure active directory 的授权
Authorization to azure active directory through web api
我已经阅读了很多文档,但可能遗漏了一些内容。我想做的是将用户名和密码传递给 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: The request body must contain the
following parameter: 'client_secret or client_assertion'
是否无法通过这种方式从 Web api 获取访问令牌?
正如@juunas 所说,我们通常只使用来自受 Azure AD 保护的本机客户端的资源所有者流。机密客户端(例如网站)不能使用直接用户凭据。
请参阅 this article 以了解有关如何使用 ADAL .NET 通过 username/password 对用户进行身份验证的更多信息。尤其是 Constraints & Limitations
部分。
在 SPA 场景中,您可以使用 Azure AD 身份验证库 (ADAL) 对用户进行身份验证并获取访问令牌以访问您在 Azure AD V1.0 中的 Web api。请点击 here 查看代码示例。
如果您使用的是 Azure AD v2.0 终结点,则应使用 Microsoft 身份验证库 (MSAL),请单击 here 查看代码示例。
我已经阅读了很多文档,但可能遗漏了一些内容。我想做的是将用户名和密码传递给 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: The request body must contain the following parameter: 'client_secret or client_assertion'
是否无法通过这种方式从 Web api 获取访问令牌?
正如@juunas 所说,我们通常只使用来自受 Azure AD 保护的本机客户端的资源所有者流。机密客户端(例如网站)不能使用直接用户凭据。
请参阅 this article 以了解有关如何使用 ADAL .NET 通过 username/password 对用户进行身份验证的更多信息。尤其是 Constraints & Limitations
部分。
在 SPA 场景中,您可以使用 Azure AD 身份验证库 (ADAL) 对用户进行身份验证并获取访问令牌以访问您在 Azure AD V1.0 中的 Web api。请点击 here 查看代码示例。
如果您使用的是 Azure AD v2.0 终结点,则应使用 Microsoft 身份验证库 (MSAL),请单击 here 查看代码示例。