Azure AD B2C自定义策略OAuth2获取AccessToken时返回无效响应问题
针对你遇到的ClaimsExchangeMessageValidationHandler返回“An invalid OAuth Response was received”且返回值为null的问题,结合你的配置和已做的排查,给出几个具体的排查方向:
修正OutputClaim的PartnerClaimType配置
你当前配置的PartnerClaimType="{oauth2:access_token}"是错误的,Azure AD B2C在映射令牌响应字段时,直接写响应JSON中的键名即可,不需要加{oauth2:}前缀。正确的配置应该是:<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="access_token" />确认令牌响应的JSON结构
虽然你说返回是JSON,但必须确保响应中包含access_token字段(注意大小写)。如果NeonCRM返回的令牌字段名不是标准的access_token,需要对应修改PartnerClaimType的值为实际字段名。检查Metadata中的端点配置
确认AccessTokenEndpoint的URL是否完全正确,包括协议(http/https)、路径是否和curl测试的一致。另外,部分OAuth2提供商要求令牌端点的token_endpoint_auth_method和HttpBinding严格匹配,你当前配置的client_secret_post和POST是匹配的,这部分没问题,但可以再确认NeonCRM的文档是否有特殊要求。添加必要的Scope配置
如果授权请求中没有指定正确的scope,令牌端点可能返回不符合B2C预期的响应。在TechnicalProfile的Metadata里添加Scope项,比如:<Item Key="scope">openid your_custom_scope</Item>具体值需要参考NeonCRM的OAuth2文档,确保和curl测试时使用的scope一致。
检查CryptographicKeys的存储引用是否正确
确认B2C_1A_NeonSandboxClientSecret这个密钥是否已经正确存储在Azure AD B2C的密钥容器中,且值和curl测试时使用的client_secret完全一致,没有多余的空格或特殊字符。
内容的提问来源于stack exchange,提问作者jprmsn

