使用 Postman 和.Net 6 Web Api时不显示用户同意屏幕

w6mmgewl  于 2022-10-08  发布在  .NET
关注(0)|答案(1)|浏览(128)

因此,我正在编写一个使用Azure AD作为API身份验证的.NET6Core Web Api。

现在以Graph API为例,您需要在应用注册中设置Graph API的作用域。在本例中,让我们使用委托的“user.read”权限。

我使用Postman来接收应用程序的访问令牌,方法是通过针对Azure AD for API进行用户身份验证。我希望收到同意屏幕,这样我就可以同意使用“user.read”。然而,这并没有发生..我登录并收到有效的访问令牌。但在后端,它将抛出一个错误,因为用户/管理员不同意该应用程序。

我怎么才能绕过这个问题呢?为什么不要求我同意应用程序注册中设置的权限?既不在 Postman 中,也不在Swagger OAuth流中..

我目前的解决方法是使用Reaction应用程序并通过前端应用程序登录。使用前端应用程序时,我被要求同意权限。同意后,我可以使用 Postman ,而不会得到“用户不同意”-错误。

有什么主意吗?我错过了什么?

twh00eeo

twh00eeo1#

让我们首先关注用户同意页面。当我们创建一个Azure广告应用程序,然后为其添加API权限,然后使用此Azure广告应用程序使您的.Net 6应用程序/Reaction应用程序集成Azure广告以使用Azure身份验证,并且我们转到Microsoft登录页面并成功登录,我们将看到一个对话框,指示此应用程序需要您同意权限列表。权限与您为AAD应用程序设置的API权限相对应。同意一次后,下次登录时不会再要求您同意。

此同意仅在用户登录时发生。让我们回到Azure AD中用于生成访问令牌的流。因为您使用了委托权限,所以您可以使用推荐的Auth code flow(另一个称为ROPC flow的流也可以生成委托访问令牌,但不推荐)。当我们使用认证码流时,我们需要首先登录,登录URL应该是这样的:

https://login.microsoftonline.com/tenant.onmicrosoft.com/oauth2/v2.0/authorize?client_id=azure_ad_app_id
&response_type=code
&redirect_uri=http://localhost/myapp/
&response_mode=query
&scope=user.read
&state=12345

我们需要使用它来获取授权码,然后我们可以使用该代码来生成访问令牌,根据我的测试,我创建了一个新的Azure广告应用程序,当我直接在浏览器中点击这个URL并登录时,它仍然需要我的同意。所以我担心你在POST MAN中测试时没有看到对话框的原因是当你在Reaction应用程序中测试时你已经同意了,或者你没有使用身份验证代码流。

相关问题