我正在学习天蓝色的所有内容,并且已经设置了客户端应用程序(角度)和Web API(.net核心2.2),并通过了一些教程和Microsoft文档来弄清楚如何配置它们以使用天蓝色登录与活动目录并相互通信。
在我的客户端应用程序和Web api上都使用azure登录。在这两种情况下,我都是通过打开应用程序服务身份验证直接在azure上完成所有配置的。
我现在面临的挑战是让我的有角度的客户端应用程序能够访问api。为了确保我的api没问题,我决定使用邮递员尝试获取访问令牌并访问我的api。我可以通过提供tenantid,clientid,客户机密和资源,然后使用客户凭证授予类型来使其正常工作。然后,我将收到的令牌传递给我的所有请求,它可以正常工作。
我的问题:
哪些特定配置(如果有的话)允许我在邮递员中获取访问令牌并成功访问api上的所有端点?我之所以问是因为要测试并尝试获得问题的答案,我进入了Expose Api刀片服务器并禁用了所有作用域,并从授权的客户端应用程序列表中删除了我的客户端应用程序。完成所有这些操作后,邮递员仍然可以在请求使用我的客户端应用程序客户端ID的情况下接收访问令牌,而我仍然可以使用该令牌来获得对我的api端点的完全访问权限。为什么?设置客户端应用程序以访问api时,是否建议使用这种访问api的方法与所有配置无关?例如,我必须按照我看过的许多教程的建议完成以下所有步骤:注册两个应用程序,启用身份验证,公开api,创建范围,将客户端应用程序添加到api的授权应用程序列表中,将范围分配给客户端应用程序。
在完成了我上面详述的所有步骤之后,并使用此处显示的示例:https://medium.com/medialesson/authenticating-angular-apps-with-azure-active-directory-using-msal-angular-1-0-d7b2f4914be9,我仍然无法使我的客户端应用成功访问我的api。我想我已经接近了,因为我看到我的有角度的客户端应用程序通过Microsoft登录并击中了我的Web api,但是随后访问api端点似乎出现了一些cors错误。这是错误消息:
home#:1 Access to XMLHttpRequest at 'https://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=2fb9b6491a444fbebfd9099033af3dc9_20200920193746&state=redir%3D%252Fapi%252Fdata' (redirected from 'https://{myapi}.azurewebsites.net/api/data') from origin 'http://localhost:4200' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. 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 - not sure what it is}_20200920193746&state=redir%3D%252Fapi%252Fdata:1 Failed to load resource: net::ERR_FAILED core.js:6228 ERROR Something went wrong!
我尝试使用我在api设置下看到的所有cors选项,但是我肯定缺少一些东西。我去了api部分-> CORS下的Web api应用程序服务。通过检查,我允许启用Access-Control-Allow-Credentials。我在允许的来源中添加了http:// localhost:4000。 我还进入了身份验证/授权,并在允许的外部重定向URL中添加了http:// localhost:4000。我想念什么?
理想情况下,我不想将我的应用程序限制为仅访问特定范围,但是如果需要,我会这样做。理想情况下,我希望我的角度客户端应用程序可以访问所有当前和将来的端点,而不必对我的api权限设置进行任何更改。