OAuth资源服务器返回错误Authentication URI(Bearer error=invalid_token)求助
问题诊断与解决方案
核心问题定位
错误提示里的authorization_uri指向错误的https://mytokenserver/login,而正确地址是https://mytokenserver/oauth2/authorize。结合你排查CRM无相关设置的结论,问题确实出在生成Assertion JWT的逻辑中——JWT断言里包含了错误的授权端点/颁发者信息,导致Dynamics CRM验证令牌时元数据不匹配,触发invalid_token错误。
具体修复步骤
定位JWT生成代码中的错误字段
找到你C#代码里构建Assertion JWT的部分,重点检查以下两类字段:- 标准JWT声明:
iss(颁发者)字段,很多OAuth实现会用这个字段关联授权端点的合法URI; - 自定义声明:如果代码里有手动添加
authorization_uri这类自定义声明,直接检查其值。
- 标准JWT声明:
修正字段值
将错误的https://mytokenserver/login替换为正确的https://mytokenserver/oauth2/authorize。以下是常见C# JWT库的修正示例:示例1:使用
System.IdentityModel.Tokens.Jwt库原错误代码:
var claims = new List<Claim> { new Claim(JwtRegisteredClaimNames.Iss, "https://mytokenserver/login"), // 其他声明(如sub、aud等) };修正后:
var claims = new List<Claim> { new Claim(JwtRegisteredClaimNames.Iss, "https://mytokenserver/oauth2/authorize"), // 其他声明(如sub、aud等) };示例2:自定义
authorization_uri声明原错误代码:
claims.Add(new Claim("authorization_uri", "https://mytokenserver/login"));修正后:
claims.Add(new Claim("authorization_uri", "https://mytokenserver/oauth2/authorize"));对齐Java OAuth服务器配置
确认你的Java OAuth服务器预配置的颁发者URI是否与你代码里设置的https://mytokenserver/oauth2/authorize一致。部分OAuth服务器会严格校验JWT的iss字段必须匹配后端配置值,不匹配会直接拒绝生成有效访问令牌。
验证步骤
- 生成修正后的Assertion JWT,用本地解码工具(比如编写简单的C#解码代码)解析,确认目标字段值已更新;
- 向Token Endpoint请求访问令牌,解码该Bearer令牌,检查其中的
iss或authorization_uri字段是否正确; - 用修正后的令牌请求Dynamics CRM资源,验证
invalid_token错误是否消除。
内容的提问来源于stack exchange,提问作者Claudio Ferraro
相关产品推荐
相关产品推荐

