.NET中Scalar迁移OAuth2授权码流(PKCE)遇Azure AD client_id缺失错误
解决AADSTS900144错误的步骤
1. 对齐Scalar与OpenAPI的安全方案名称
你的OpenAPI文档中定义的安全方案名称是Bearer,但Scalar配置里的AddPreferredSecuritySchemes和AddAuthorizationCodeFlow用的是OAuth2/OAuth,名称不匹配会导致Scalar无法正确关联配置,传递参数时遗漏client_id。
修改Scalar配置:
application.MapScalarApiReference( options => options .AddPreferredSecuritySchemes("Bearer") // 改为和OpenAPI一致的名称 .AddAuthorizationCodeFlow("Bearer", flow => // 安全方案名称匹配OpenAPI里的"Bearer" { flow.ClientId = entraIdAuthenticationSettings.ClientId; flow.Pkce = Pkce.Sha256; // 明确指定Entra ID的授权和令牌端点,确保和OpenAPI配置一致 flow.AuthorizationUrl = "https://login.microsoftonline.com/[company-id]/oauth2/v2.0/authorize"; flow.TokenUrl = "https://login.microsoftonline.com/[company-id]/oauth2/v2.0/token"; flow.Scopes = entraIdAuthenticationSettings.Scopes; }));
2. 更新OpenAPI的OAuth2流类型
你当前OpenAPI用的是implicit隐式流,而Scalar配置的是授权码流(Authorization Code Flow),两者不匹配会导致认证流程参数错误。Entra ID推荐使用带PKCE的授权码流,所以修改OpenAPI的flows:
"securitySchemes": { "Bearer": { "type": "oauth2", "flows": { "authorizationCode": { // 替换原来的implicit流 "authorizationUrl": "https://login.microsoftonline.com/[company-id]/oauth2/v2.0/authorize", "tokenUrl": "https://login.microsoftonline.com/[company-id]/oauth2/v2.0/token", "scopes": { "api://[app-id]/Redispatch-Access": "Access the API for reading" } } } } }
3. 验证Entra ID应用配置
确保你的Entra ID应用注册中:
- 已启用授权码流(在「身份验证」→「高级设置」里确认允许授权码流)
- 重定向URI已添加Scalar的回调地址(通常为
https://<你的域名>/scalar/oauth2/callback) - Client ID与代码中
entraIdAuthenticationSettings.ClientId完全一致
完成以上修改后重启应用,再尝试通过Scalar UI跳转认证,即可正常传递client_id参数,解决AADSTS900144错误。
内容的提问来源于stack exchange,提问作者Mathias F
相关产品推荐
相关产品推荐

