我有一个基于网站的网络应用程序,通过AAD登录对用户进行身份验证。成功登录会使用访问令牌将用户重定向回应用程序(此部分全部使用adal_angular.js / adal.js完成)
然后将令牌传递给基于站点的api,根据此示例(https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof)代表用户获取新令牌以调用下游api。到目前为止一直很好。
下游api重复此过程以获取另一个令牌以进一步向下游调用另一个api。这就是问题所在。
在这里调用AcquireTokenAsync()时,我没有得到任何响应。 *编辑:没有响应意味着我没有得到Azure AAD的响应,使用Fiddler跟踪HTTP流量,我没有看到任何网址被作为AcquireTokenAsync呼叫的一部分被点击*
我注意到我此时使用的令牌现在是" user_impersonation"令牌,其中基于站点的api收到的令牌不是。这有意义吗?
是否应支持此架构?
答案 0 :(得分:0)
好的,这里的问题是我自己在webapi中使用异步方法。如果要在webapi中调用异步方法,则需要将自己的Web api方法标记为异步。如果ASP.Net不知道你想在控制器中调用异步方法,它可能会导致死锁。 (这里有一个很好的解释:http://blog.stephencleary.com/2012/07/dont-block-o ...... 你永远不应该在web api中的异步方法上使用.Result。