设定:
在Web应用程序中,在Katana中,OWIN中间件:
resourceId: https://graph.microsoft.com
)现在一切都很好,花花公子,我可以使用Access Token作为承载并调用Microsoft Graph并获取/me
用户个人资料,图片和不是。
但是如何从我的Web应用程序中调用自己的Azure AD保护API?
我无法再次为另一个resourceId
交换授权码。我可以context.AcquireTokenAsync()
使用app_id
和app_secret
,但我回来的JWT不包含任何用户识别声明,所以现在我的API没有了解调用用户的任何信息,它只知道机密客户端(我的Web应用程序)确实提供了有效的令牌。
如何请求成功调用我的API的令牌将返回某种用户声明? 用户主体名称或用户ID 可能就足够了。
我应该将所有Microsoft Graph调用逻辑移动到WebAPI并交换我的API resourceId
的授权代码,还是我的难题有就地解决方案?这里的正确模式是什么?好的不是正确,也许只是更好。
答案 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" }
}