使用jQuery调用Openiddict获取token失败,C#调用正常该如何解决?
问题核心原因整理
- 请求格式不符合OAuth2规范:OpenIddict的
/connect/token端点遵循标准OAuth2协议,仅支持application/x-www-form-urlencoded格式的请求体,不接收JSON格式参数。你的C#代码用FormUrlEncodedContent发送表单格式请求符合要求,但jQuery代码错误配置了contentType: 'application/json; charset=UTF-8',直接导致服务端无法解析参数。 - 请求头配置错误:
- jQuery中配置请求头的正确字段是
headers(复数),你写的header字段不会生效。 Access-Control-Allow-Origin是服务端返回的响应头,不需要客户端主动在请求中携带,额外添加反而可能触发跨域预检失败。
- jQuery中配置请求头的正确字段是
- 数据序列化逻辑错误:你直接传入JSON对象作为请求数据,配合错误的contentType配置,jQuery会把对象序列化为JSON字符串发送,和服务端要求的表单格式完全不匹配。
修正后的jQuery代码
var body = { grant_type: 'password', username: email, password: password }; $.ajax({ url: 'https://localhost:7000/connect/token', crossDomain: true, type: 'POST', dataType: 'json', // 移除自定义的contentType,jQuery会自动适配表单格式的contentType data: body, complete: function(result) { alert(result); }, success: function(result) { alert(result + " OK!"); }, error: function(result) { alert(result + " CHYBA"); }, });
Postman调用注意事项
Postman中新建POST请求,打开Body标签,选择x-www-form-urlencoded格式,然后填入grant_type、username、password三个参数即可,不要选择raw下的JSON格式发送。
如果调整后仍然存在跨域报错,需要在你的OpenIddict服务端配置对应客户端的跨域访问权限,添加前端访问地址到CORS允许列表。
内容的提问来源于stack exchange,提问作者quanchinhong
相关产品推荐
相关产品推荐

