从Web App调用两个不同的Azure AD保护API

时间:2018-01-16 12:46:01

标签: asp.net-mvc azure-active-directory microsoft-graph adal

设定:

  • ASP.NET MVC5应用程序(Full Framework NET 4.7),其中Azure AD位于顶部
  • WebAPI(Full Framework NET 4.7),其中Azure AD位于顶部
  • 两个应用程序中使用的.NET ADAL 3.x库(不是MSAL)

在Web应用程序中,在Katana中,OWIN中间件:

  • 我验证用户(我控制的目录中的组织帐户)
  • i然后交换访问令牌的授权码
    (使用resourceId: https://graph.microsoft.com
  • 我将生成的访问令牌放在用户声明中

现在一切都很好,花花公子,我可以使用Access Token作为承载并调用Microsoft Graph并获取/me用户个人资料,图片和不是。

但是如何从我的Web应用程序中调用自己的Azure AD保护API?

我无法再次为另一个resourceId交换授权码。我可以context.AcquireTokenAsync()使用app_idapp_secret,但我回来的JWT不包含任何用户识别声明,所以现在我的API没有了解调用用户的任何信息,它只知道机密客户端(我的Web应用程序)确实提供了有效的令牌。

如何请求成功调用我的API的令牌将返回某种用户声明用户主体名称用户ID 可能就足够了。

我应该将所有Microsoft Graph调用逻辑移动到WebAPI并交换我的API resourceId的授权代码,还是我的难题有就地解决方案?这里的正确模式是什么?好的不是正确,也许只是更好

1 个答案:

答案 0 :(得分:1)

您可以为另一个API请求具有相同授权码的第二个访问令牌。

根据您请求访问令牌的方式,令牌的受众可能是API的客户端ID或应用程序ID URI。因此,您必须确保两者都是API中的受众群体。

对于ASP.NET Core API,您可以在JWT Bearer身份验证配置中添加以下内容:

TokenValidationParameters = new TokenValidationParameters
{
    ValidAudiences = new [] { "https://blabla", "g-u-i-d" }
}