我已使用依赖项
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";
}
}
当前行为 在我的本地环境中,身份验证流程完美运行:
http://localhost:8080/
的请求重定向至 http://localhost:8080/oauth2/authorization/azure.
https://login.microsoftonline.com/....
但是,在生产环境中:
https://www.custdomain.com/
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/...
)?
补充说明
https://www.custdomain.com/login/oauth2/code/
。如何实现此设置?
是否可以将应用程序配置为绕过重定向到后端的 /oauth2/authorization/azure 端点的中间步骤,而是将用户直接重定向到 Azure AD 登录页面 (https://login.microsoftonline.com/)。 ..)?
授权代码流应在 OAuth2 客户端上启动,以便:
所以,不,您不能跳过此电话至
/oauth2/authorization/${registration-id}
。
由于您的后端是 REST API,因此对未经授权的请求返回
401
是比 301
更好的默认值。您的前端应该决定如何处理未经授权的请求以及在哪里对用户进行身份验证。
我对单页和移动应用程序所做的是:
oauth2Login
公开列出 Spring 客户端上的身份验证选项的端点。此端点返回可以启动授权代码的 URI 列表(在您的情况下,这将是一个只有一个条目指向 https://www.custdomain.com/oauth2/authorization/azure
的列表)401
),前端将用户代理重定向到授权端点(如果只有一个条目,则直接重定向或提示用户选择一个)如果有几个)