
在开发依赖microsoft身份验证的应用时,一个常见的问题是,当本地应用(如运行在localhost上)尝试重定向到login.microsoftonline.com进行登录时,会遇到aadsts50011错误。这个错误表明请求中指定的回调url与azure ad应用配置的回复url不匹配。
尽管可以通过在Azure AD B2C中为localhost配置相应的回复URL来解决,但这种方法存在以下局限性:
因此,我们需要一种能够在本地模拟Microsoft登录行为,并始终返回成功响应的解决方案。
解决上述问题的核心思路是引入一个本地的OpenID Connect (OIDC) 模拟服务器。这个模拟服务器将充当身份提供者(Identity Provider, IdP),替代login.microsoftonline.com,负责处理本地应用的认证请求。它的主要优势在于:
Soluto 提供了一个非常方便的Docker镜像 Soluto/oidc-server-mock,它实现了基本的OpenID Connect 功能,可以完美地作为本地开发环境的模拟身份提供者。
要将 oidc-server-mock 集成到您的Docker Compose项目中,只需在 docker-compose.yml 文件中添加一个新的服务定义。
以下是一个示例 docker-compose.yml 配置:
version: '3.8'
services:
# 您的本地Web应用服务
your-app:
build: .
ports:
- "8080:80" # 假设您的应用运行在80端口,并映射到主机的8080端口
environment:
# 将应用的身份提供者URL指向 OIDC 模拟服务器
# 确保这个URL与 oidc-server-mock 服务名称匹配
OIDC_AUTHORITY_URL: http://oidc-server-mock:8080/ # 或者根据您的应用配置,可能是 http://oidc-server-mock
OIDC_CLIENT_ID: "your-client-id" # 任意客户端ID,模拟服务器通常不验证
OIDC_CLIENT_SECRET: "your-client-secret" # 任意客户端Secret
OIDC_REDIRECT_URI: "http://localhost:8080/signin-oidc" # 您的应用回调地址
# OIDC 模拟服务器服务
oidc-server-mock:
image: soluto/oidc-server-mock:latest
ports:
- "8081:8080" # 将模拟服务器的8080端口映射到主机的8081端口,以便从主机访问调试
environment:
# 可以设置一些环境变量来配置模拟服务器的行为
# 例如,设置一个默认的用户名和角色,模拟返回的身份信息
MOCK_OIDC_USERNAME: "devuser@example.com"
MOCK_OIDC_ROLES: "Developer,Tester"
MOCK_OIDC_ISSUER: "http://oidc-server-mock:8080" # 模拟服务器的Issuer URL配置说明:
在您的本地Web应用中,您需要修改其OpenID Connect配置,将身份提供者(Issuer/Authority)的URL从login.microsoftonline.com更改为指向您的oidc-server-mock服务。
例如,如果您使用的是ASP.NET Core,在Startup.cs或Program.cs中配置OIDC中间件时,Authority属性应指向模拟服务器:
// 示例:ASP.NET Core OIDC 配置
services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddOpenIdConnect(options =>
{
options.Authority = Configuration["OIDC_AUTHORITY_URL"]; // 从环境变量获取,即 http://oidc-server-mock:8080/
options.ClientId = Configuration["OIDC_CLIENT_ID"];
options.ClientSecret = Configuration["OIDC_CLIENT_SECRET"];
options.ResponseType = OpenIdConnectResponseType.Code;
options.SaveTokens = true;
options.GetClaimsFromUserInfoEndpoint = true;
options.RequireHttpsMetadata = false; // 仅限开发环境,因为是HTTP
options.CallbackPath = "/signin-oidc"; // 您的应用回调路径
// 其他配置...
});Soluto/oidc-server-mock 镜像会自动处理OpenID Connect规范中定义的 .well-known/openid-configuration 发现文档路径,因此您的应用无需特殊配置即可发现模拟服务器的端点。
通过在Docker Compose中引入Soluto/oidc-server-mock作为本地的OpenID Connect模拟服务器,开发者可以有效地解决在本地开发环境中集成Microsoft登录时遇到的AADSTS50011错误和外部依赖问题。这种方法提供了一个隔离、可控且高效的认证测试环境,极大地简化了开发和调试流程,是现代容器化应用本地开发不可或缺的工具。
以上就是在Docker Compose中模拟Microsoft登录实现本地开发隔离的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号