调用https://login.tapkey.com/connect/token接口出现CORS错误问题咨询
问题根因
https://login.tapkey.com/connect/token是Tapkey的OAuth 2.0令牌端点,出现该问题的核心原因有两个:
- 浏览器的同源策略限制:前端发起的跨域HTTP请求会被浏览器先做预检校验,如果目标服务端没有返回匹配的CORS响应头(比如
Access-Control-Allow-Origin),请求会被直接拦截,返回CORS错误;而服务端之间的HTTP请求不受同源策略约束,所以后端调用可以正常返回。 - 令牌端点的安全设计:按照OAuth 2.0授权码流程的安全规范,授权码换令牌的步骤需要携带客户端密钥
client_secret,该密钥不能暴露在前端代码中,因此Tapkey默认没有为该端点配置跨域许可,禁止前端直接调用。
解决方案
- 首选方案(符合安全规范):保持现有后端中转的逻辑,前端将认证阶段拿到的
code先传给自己的业务后端,由后端携带client_id、client_secret、code、redirect_uri等必填参数调用https://login.tapkey.com/connect/token接口,拿到访问令牌、刷新令牌后再返回给前端即可,该方案既可以规避CORS问题,也能避免client_secret泄露。 - 备用方案(仅适用于纯前端应用):如果你的应用没有后端服务,必须前端直接调用令牌端点,需要切换为带PKCE(授权码交换证明密钥)校验的授权码流程(该流程不需要传递
client_secret),同时在Tapkey开发者后台为你的客户端配置允许跨域的前端域名,申请开启令牌端点的跨域访问权限,注意禁止在前端代码中硬编码任何client_secret信息,避免身份被盗用。
内容的提问来源于stack exchange,提问作者Alvin Mutisya
相关产品推荐
相关产品推荐

