【发布时间】:2019-04-18 14:15:43
【问题描述】:
我有一个 Web 应用 (Angular 7),它使用 MSAL Angular 通过 Azure AD 对用户进行身份验证,并获取访问令牌以访问我的 Web API (.NET 4.6)。这两个应用程序都在 Azure 门户中注册,并具有以下权限,如 here 所述:
- Web 应用程序:
user_impersonation用于 Web API(委托) - Web API:
User.Read; Mail.Send用于 MS Graph(委托)
现在我想使用 ADAL for .NET 从 Web API 调用 Microsoft Graph 以获取一些数据 on behalf of a user。
在this instructions 之后,我应该配置consentScopes 和protectedResourceMap,但由于我使用的是AAD v1,因此我无法在增量同意的情况下使用范围。
我应该如何配置我的 Web 应用以获取 Web API 和 MS Graph 的访问令牌?
我found 可以使用 MSAL.js 获取 AAD v1.0 的令牌(并且我能够与我的 Web API 进行通信),但我不知道如何为 代表与 MS Graph 进行 Web API 通信的流程。
更新
这是从 Web API 发出访问令牌请求的代码:
string accessToken = null;
var userAssertion = new UserAssertion(
<userAccessToken>,
"urn:ietf:params:oauth:grant-type:jwt-bearer",
userName);
var authority = "https://login.microsoftonline.com/" + <tenant> + "/";
var clientCredencial = new ClientCredential(<clientId>, <clientSecret>);
var authContext = new AuthenticationContext(authority, null);
try
{
var authResult = await authContext.AcquireTokenAsync(
"https://graph.microsoft.com",
clientCredencial,
userAssertion);
accessToken = authResult.AccessToken;
}
catch (AdalServiceException ex) { throw; }
Web 应用程序在 Web API 清单中添加为 knownClientApplications:
"knownClientApplications": [
"<WebAppAppId>"
],
这些是在 Web App (MsalModule) 中设置的范围:
consentScopes:
[
'https://webapi.example.com/user_impersonation'
],
在这种情况下,Web 应用在同意屏幕上需要以下权限:
- 访问 WebAPIName
- 随时访问您的数据
- 查看您的基本资料
如果我尝试获取 MS Graph 的访问令牌,则会收到错误消息:
{“AADSTS65001:用户或管理员未同意使用 ID 为“WebApiClientId”、名为“WebApiAppName”的应用程序。为此用户和资源发送交互式授权请求。}
【问题讨论】:
-
如果您的 Web API 接受 v1.0 令牌,您可以尝试使用“graph.microsoft.com”作为 ADAL.NET 中的资源来执行 OBO。另一种方法是更改您的 Web API 以接受 v2.0 令牌,并使用 MSAL.NET。这对你来说是一个选择吗?
-
我尝试使用“graph.miscosoft.com”,但出现错误(请参阅更新后的问题)。
-
您的 Web API 应用是否具有为 Microsoft Graph 授予的必需权限?如果没有,请转到 Azure AD 中的 Web API 应用注册。> 设置 > 所需权限 > 添加 Microsoft Graph 并选择适当的权限。最后,如果任何权限显示需要管理员同意,请单击授予权限。可能是您选择了正确的权限,但从未授予权限。我说这个是看错误信息。
-
正如我所说,Web API 具有以下权限:
User.Read; Mail.Send。两者都是委托的,所以用户应该同意。
标签: c# azure-active-directory microsoft-graph-api adal msal