如何配置azure ad以允许基于访问令牌访问api

如何配置azure ad以允许基于访问令牌访问api,azure,azure-api-management,azure-api-apps,Azure,Azure Api Management,Azure Api Apps,我正在学习azure的所有知识,我已经安装了客户端应用程序(angular)和web api(.net core 2.2),并阅读了一些教程和microsoft文档,以了解如何将它们配置为使用azure登录active directory并相互通信 在我的客户端应用程序和web api上使用azure登录。在这两种情况下,我都直接在azure上通过启用应用程序服务身份验证进行了所有配置 我现在的挑战是让我的angular客户端应用程序能够访问api。为了确保我的api没有问题,我决定使用post

我正在学习azure的所有知识,我已经安装了客户端应用程序(angular)和web api(.net core 2.2),并阅读了一些教程和microsoft文档,以了解如何将它们配置为使用azure登录active directory并相互通信

在我的客户端应用程序和web api上使用azure登录。在这两种情况下,我都直接在azure上通过启用应用程序服务身份验证进行了所有配置

我现在的挑战是让我的angular客户端应用程序能够访问api。为了确保我的api没有问题,我决定使用postman来尝试获取访问令牌并访问我的api。我可以通过提供我的tenantid、clientid、客户端机密和资源,然后使用客户端凭据授予类型来实现这一点。然后,我将收到的令牌传递给我的所有请求,它就起作用了

我的问题是:

  • 哪些特定配置(如果有)允许我在postman中获取访问令牌并成功访问api上的所有端点?我之所以这么问是因为为了测试并试图得到我问题的答案,我进入了ExposeanAPI刀片,禁用了所有作用域,并从授权客户机应用程序列表中删除了我的客户机应用程序。完成所有这些之后,postman仍然能够接收一个访问令牌,其中请求使用我的客户端应用程序客户端id,我仍然能够使用该令牌获得对api端点的完全访问。为什么?这种访问api的方法是否与设置客户端应用程序以访问api时建议的所有配置无关?例如,我必须按照我看过的许多教程的建议完成以下所有步骤:注册两个应用程序、启用身份验证、公开api、创建作用域、将客户端应用程序添加到api的授权应用程序列表中、将作用域分配给客户端应用程序

  • 在完成了我上面详述的所有步骤之后,并且使用了这里显示的示例:,我仍然无法让我的客户端应用程序成功访问我的api。我认为我很接近,因为我看到我的angular客户端应用程序通过microsoft登录并点击我的web api,但是访问api端点时似乎出现了某种cors错误。以下是错误消息:

  • home#:1在'https://login.windows.net/{tenantid}/oauth2/authorize?响应类型=id\u令牌和重定向\u uri=https%3A%2F%2F{myapi}.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client\u id={clientid}&scope=openid+profile+email&response\u mode=form\u post&nonce=2fb9b6491a444fbebfd9099033af3dc9\u 20200920193746&state=redir%3D%252Fapi%252Fdata(从“https://{myapi}.azurewebsites.net/api/data”重定向)http://localhost:4200'已被CORS策略阻止:请求的资源上不存在'Access Control Allow Origin'标头。login.windows.net/{tenantid}/oauth2/authorize?response_type=id_token&redirect_uri=https%3A%2F%2F{myapi}.azurewebsites.net%2F.auth%2Flogin%2Faad%2Fcallback&client_id={clientid}&scope=openid+profile+email&response_mode=form_post&nonce={some guid-不确定是什么}_20200920193746&state=redir%3D%252Fapi%252Fdata:1未能加载资源:net::ERR_Failed core.js:6228错误—出现了错误

    我试着在api设置下使用我看到的所有cors选项,但我肯定错过了什么。我转到api部分->CORS下的web api应用程序服务。我通过检查允许访问控制允许凭据。我补充说http://localhost:4000 在允许的原产地。 我还进行了身份验证/授权,并添加了允许的外部重定向URLhttp://localhost:4000. 我错过了什么


    理想情况下,我不想限制我的应用程序只访问特定的作用域,但如果需要,我会这样做。理想情况下,我希望我的angular客户端应用程序能够访问所有当前和未来的端点,而不必对api权限设置进行任何更改。

    我能够修复我的CORS错误,但使用
    *
    而不是
    http://localhost:4000
    在web api应用程序服务CORS部分。但是,现在我得到了一个
    401(未经授权)
    。我在CORS错误之外的问题仍然有效,事实上我也想知道为什么设置
    http://localhost:4000
    不起作用。