我正试图找出我的代码出了什么问题,以使用带有axios的react-native android应用程序从IdentityServer4 API请求访问令牌。
无论我做什么,我的服务器总是以HTTP 400错误invalid_grant
响应。
下面是我请求数据的方法的代码。我尝试了各种方式发出请求(可以在SO和github上找到人们讨论的方式),但是所有这些方式都给我invalid_grant
或invalid_client
错误。
我非常确定服务器本身正常,因为我可以使用PostMan进行相同的请求。
我在运行应用程序的android模拟器中检查了请求。看起来请求正文正常,并且'content-type'
标头存在且正确。
如果有人知道这里发生了什么,请提供帮助。我没主意了。我可以在网上找到的所有片段和示例(包括官方文档)都没有给我预期的结果。
这是我的方法的代码
import axios from 'axios';
import qs from 'qs';
const API_CLIENT_ID = 'ro.client';
const API_CLIENT_SECRET = 'secret';
const API_BASE_URL = "http://localhost:5002";
async getAccessToken(credentials) {
const axiosConfig = {
baseURL: API_BASE_URL,
timeout: 30000,
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
};
const requestData = {
client_id: API_CLIENT_ID,
client_secret: API_CLIENT_SECRET,
grant_type: 'password',
username: credentials.username,
password: credentials.password,
scope: 'api1'
};
try {
const result = await axios.post('/connect/token', qs.stringify(requestData), axiosConfig);
return result.response;
} catch (err) {
return err;
}
}
以下是来自邮递员的屏幕截图,使用相同的请求参数获得了成功的结果。
答案 0 :(得分:1)
感谢Kirk Larkin的评论,我意识到我的代码正在向请求中的服务器提供空的用户名和密码。无需提供任何有意义的响应,服务器仅发送invalid_grant
。
一旦我提供了正确的用户名和密码,上面的代码就可以正常工作。
也许这会对某人有所帮助。