如何在 Spring Boot 应用程序中使用专用终结点和 WAF 管理 Azure AD 身份验证?

问题描述 投票:0回答:1

我已使用依赖项

spring-cloud-azure-starter-active-directory
在 Spring Boot 项目的 application.properties 文件中配置了 Azure AD 凭据。这是配置:

spring.cloud.azure.active-directory.enabled=true
spring.cloud.azure.active-directory.profile.tenant-id=${TENANT_ID_ENV_VAR}
spring.cloud.azure.active-directory.credential.client-id=${CLIENT_ID_ENV_VAR}
spring.cloud.azure.active-directory.credential.client-secret=${CLIENT_SECRET_ENV_VAR}
spring.cloud.azure.active-directory.redirect-uri-template=https://www.custdomain.com/login/oauth2/code/

申请代码:

@RestController
public class HelloWorldController {
    @GetMapping("/")
    public String helloWorld() {
        return "Greetings! from Webapp";
    }
}

当前行为 在我的本地环境中,身份验证流程完美运行:

  1. http://localhost:8080/
    的请求重定向至
    http://localhost:8080/oauth2/authorization/azure.
  2. 此端点将用户重定向到 Azure AD 登录页面:
    https://login.microsoftonline.com/....
  3. 成功登录后,用户将被重定向回配置的重定向URI。

但是,在生产环境中:

  • 应用程序托管在 Azure 应用服务 (ASP) 中。
  • 出于安全要求,在 Azure 应用服务上启用了专用终结点,并且应用程序通过 WAF(Web 应用程序防火墙)服务器公开。
    • WAF 网址:
      https://www.custdomain.com/
    • 后端应用服务 URL:
      https://webapp0101.azurewebsites.net/
      当用户向
      https://www.custdomain.com/
      发出请求时,WAF会将请求转发到
      https://webapp0101.azurewebsites.net/
      的后端应用程序。 由于后端的身份验证配置,应用程序将用户重定向到:
      https://webapp0101.azurewebsites.net/oauth2/authorization/azure

由于后端现在是私有的且不可公开访问,因此用户会收到 403 Forbidden 错误。

期望的结果

是否可以将应用程序配置为绕过重定向到后端

/oauth2/authorization/azure
端点的中间步骤,而是将用户直接重定向到 Azure AD 登录页面 (
https://login.microsoftonline.com/...
)?

补充说明

  • Azure AD 中配置的重定向 URI 是
    https://www.custdomain.com/login/oauth2/code/
  • 目标是维护此架构,同时遵守专用端点和 WAF 的安全最佳实践。

如何实现此设置?

java spring-boot azure oauth-2.0 web-application-firewall
1个回答
0
投票

是否可以将应用程序配置为绕过重定向到后端的 /oauth2/authorization/azure 端点的中间步骤,而是将用户直接重定向到 Azure AD 登录页面 (https://login.microsoftonline.com/)。 ..)?

授权代码流应在 OAuth2 客户端上启动,以便:

  • 确保启动会话并在用户代理上设置会话 cookie
  • 设置一些安全参数(在会话和授权请求 URI 中)。当授权码返回给客户端时,会检查这些参数。

所以,不,您不能跳过此电话至

/oauth2/authorization/${registration-id}

由于您的后端是 REST API,因此对未经授权的请求返回

401
是比
301
更好的默认值。您的前端应该决定如何处理未经授权的请求以及在哪里对用户进行身份验证。

我对单页和移动应用程序所做的是:

  • 使用
    oauth2Login
    公开列出 Spring 客户端上的身份验证选项的端点。此端点返回可以启动授权代码的 URI 列表(在您的情况下,这将是一个只有一个条目指向
    https://www.custdomain.com/oauth2/authorization/azure
    的列表)
  • 在启动期间或尝试登录用户之前,前端会查询此端点以了解将用户重定向到何处进行登录
  • 当需要用户登录时(用户单击登录按钮或请求拦截器处理
    401
    ),前端将用户代理重定向到授权端点(如果只有一个条目,则直接重定向或提示用户选择一个)如果有几个)
© www.soinside.com 2019 - 2024. All rights reserved.