【发布时间】:2019-08-12 09:37:29
【问题描述】:
我有一个使用 MSAL 从 Azure AD 获取访问令牌的应用。这是在拥有自己的 Azure App Registry 的客户端上完成的。然后,我将此访问令牌传递给服务器,然后服务器调用 Microsoft Graph 以代表用户获取其他信息。但是,当我进行图形调用时,我得到了一个观众不匹配的失败。这似乎很合适,但现在我不确定如何将 Web 服务器受众 ID 添加到令牌中。
首先,对于此类场景,这是正确的工作流程吗?我使用 MSAL 对用户进行身份验证,然后使用 Web 服务调用图形以获取更多信息。 其次,如果使用 AzureADBearer,是否可以向访问令牌添加多个受众?我知道 JWTBearer 可以做到这一点。
//web service
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(sharedOptions =>
{
sharedOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddAzureAdBearer(options =>
{
Configuration.Bind("AzureAd", options);
})
.AddCookie(options => options.Cookie.SameSite = SameSiteMode.None);
【问题讨论】:
-
您描述流程的方式我希望您没有直接使用从客户端到 Web 服务的令牌来代表用户调用 Microsoft Graph API。因为这在代表流程..一旦您根据传入令牌在 Web 服务中对客户端进行了身份验证,那么 Web 服务应该代表用户获取专门用于 Microsoft 图形的新令牌(使用第一个令牌).. 查看更多描述这里..docs.microsoft.com/en-us/azure/active-directory/develop/…
-
Rohit 完全正确。令牌仅对一个 API(又名受众)有效。因此,您必须获取不同的令牌才能调用 MS Graph API。您可以获取令牌以代表用户调用,也可以使用客户端凭据并仅作为应用程序进行调用。如果可能,我更喜欢第一种方法,它使用委派的权限并将您限制在用户可以访问的范围内。第二种方法使用应用程序权限(需要管理员同意。
-
看起来没有简单的方法可以在 .net core 2 web 应用程序上使用 AureAD 和使用 MSAL 的 .net core 2 web api 执行 OBO。是这样吗?
-
我添加了一个带有链接代码示例的答案,以展示如何做到这一点。示例非常接近您尝试执行的 WPF 应用程序(而不是您的情况下的 Web 应用程序) -> Web API -> 代表用户的 MS Graph。由于代表用户调用的重要代码逻辑驻留在 Web API 中,您可能会发现它非常相似。
标签: asp.net-core azure-active-directory msal