我正在尝试使用Postman测试我的ASP.NET Core 2.2 Web API。我的API受Azure AD保护。我一直在使用“ Web应用程序API” Microsoft Azure Sample on GitHub,并仔细检查了所有步骤。
使用邮递员,我要求它使用OAuth2隐式流程获取令牌,但确实获得了返回的令牌。如果我对令牌进行解码,它似乎包含了我想要的所有声明:ol.nicelist li, ul.nicelist li {
position: relative;
display: block;
padding: .4em .4em .4em 2em;
margin: .6em 0;
background: #EFEFEF;
text-decoration: none;
border-radius: .3em;
font-size: 0.94em;
}
,aud
和upn
都是有意义的。
但是,当我随后使用返回的令牌向API发送请求时,我仍然收到401。
该API之所以有效,是因为如果删除scp
属性,我将获得返回的数据。
如果我尝试通过Web客户端访问API,则会收到错误消息:[Authorize]
,但是鉴于令牌中返回了我的MsalUiRequiredException: No account or login hint was passed to the AcquireTokenSilent call.
,这毫无意义。
任何人都可以建议采取进一步措施以找出问题所在。
在line 381 of TokenAcquisition.cs上upn
是account
,因此,随后调用null
时,结果是AcquireTokenSilent()
。
答案 0 :(得分:0)
我放弃了Postman一段时间,并专注于Web客户端。我必须在Azure门户中将Application ID URI
从https://<company>.onmircrosoft.com/<myapi>/user_impersonation
重命名为api://<application_guid>/access_as_user
,并在应用程序代码中重命名。这使TokenAcquisition.cs开始返回令牌,并且让Web应用程序与API通讯。
我仍然没有邮递员在工作,尽管现在它返回一条消息:invalid_client
。可能因为我需要使用其他流程。无论如何,我现在很开心。