首页 > 解决方案 > 是否可以在 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。

标签: angularazureazure-api-managementmsal

解决方案


虽然 Azure API 管理主要是为 API 设计的,但仍然可以在其后面托管 SPA。有 2 个关键点需要注意

  1. 使用这样的 GET 操作

    apim-get-operation-spa

  2. redirect-content-urls策略的出站块中使用策略

    apim-操作-策略-spa

来到您的其他查询

  1. 是的。您可以validate-jwt在您的inbound范围和on-error范围内使用,将用户重定向到登录页面。

    此外,由于此时您没有加载任何 JavaScript,因此您必须使用redirect_uri返回 APIM 并在标头中设置返回的访问令牌,然后使用validate-jwt.

    由于验证会成功,它现在会index.html在响应中加载和,您可能希望有一个Set-Cookie标头来将访问令牌返回给浏览器,并在对其他资源(和 API 调用)的后续请求中自动发送。

  2. 有点儿。APIM 将首先返回一个令牌以获取 SPA 文件(也可用于 API 调用),但对于 MSAL 客户端,您的 SPA 也会获取一个令牌,从而产生 2 个令牌。

    理想情况下,cookie 中的敏感数据应使用 Secure 和 Http Only cookie 进行保护。您可以在此处阅读更多相关信息。
    有了这样的cookie,你的JS就无法访问token,但是cookie会在所有请求中发送到同一个域,APIM可以提取。
    因此,您可以从应用程序中删除 MSAL 代码。

  3. 以上是实现您所需要的相当好的方法。


推荐阅读