angular - 是否可以在 Azure APIM 编写自定义代码
问题描述
我正在使用 Angular SPA 和 Azure AD 进行身份验证。我的要求是,如果用户未通过身份验证,则应将其直接重定向到 MS 登录页面,而无需在浏览器中下载 SPA。(因为 AuthGaurd 也只有在下载 SPA 后才能工作,并且 SPA 页面会在一段时间内可见。
我正在考虑首先在 APIM 重定向 SPA,然后在 APIM 我检查用户是否经过身份验证。如果用户未通过身份验证,我会将 ir 重定向到 MS 登录页面。
1-我可以在 APIM 中写这样的登录吗?2-这种方法是否会影响令牌刷新的静默身份验证(我在客户端使用 MSAL)?3-在第一次请求时无需下载 SPA 的其他最佳方法是重定向到 MS 登录页面吗?
我刚刚分析并试图找出最佳方法,但可以找到一个具体的解决方案来重定向到 MS 登录页面而无需下载 SPA。
解决方案
虽然 Azure API 管理主要是为 API 设计的,但仍然可以在其后面托管 SPA。有 2 个关键点需要注意
使用这样的 GET 操作
在
redirect-content-urls
策略的出站块中使用策略
来到您的其他查询
是的。您可以
validate-jwt
在您的inbound
范围和on-error
范围内使用,将用户重定向到登录页面。此外,由于此时您没有加载任何 JavaScript,因此您必须使用
redirect_uri
返回 APIM 并在标头中设置返回的访问令牌,然后使用validate-jwt
.由于验证会成功,它现在会
index.html
在响应中加载和,您可能希望有一个Set-Cookie
标头来将访问令牌返回给浏览器,并在对其他资源(和 API 调用)的后续请求中自动发送。有点儿。APIM 将首先返回一个令牌以获取 SPA 文件(也可用于 API 调用),但对于 MSAL 客户端,您的 SPA 也会获取一个令牌,从而产生 2 个令牌。
理想情况下,cookie 中的敏感数据应使用 Secure 和 Http Only cookie 进行保护。您可以在此处阅读更多相关信息。
有了这样的cookie,你的JS就无法访问token,但是cookie会在所有请求中发送到同一个域,APIM可以提取。
因此,您可以从应用程序中删除 MSAL 代码。以上是实现您所需要的相当好的方法。
推荐阅读
- angular - 当我尝试浏览 HTML 文档时,Karma Html Reporter 重新加载测试
- azure-cosmosdb - 命令中的查询必须针对单个分片键
- python - 在使用 tf-idf 的 NLP 中,如何在 python 中从语料库(包含大量文档)中找到特定单词的频率
- jenkins - Jenkins作业自动化优化
- python-3.x - 为什么在 pyfftw 中需要 fft_object.update_arrays()?
- python - 为多个 mcc 帐户提取 Adwords 报告
- shell - 如何在不停止脚本的情况下终止 shell 脚本中的日志记录过程?
- html - HTML element with # to pug-template
- amazon-web-services - AWS CodePipeline 部署过程
- python - 无法删除超过 2 NaN 的行