带axios和react-native的IdentityServer4令牌请求

时间:2018-08-19 14:52:13

标签: react-native axios identityserver4

我正试图找出我的代码出了什么问题,以使用带有axios的react-native android应用程序从IdentityServer4 API请求访问令牌。

无论我做什么,我的服务器总是以HTTP 400错误invalid_grant响应。

下面是我请求数据的方法的代码。我尝试了各种方式发出请求(可以在SO和github上找到人们讨论的方式),但是所有这些方式都给我invalid_grantinvalid_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;
    }       
}

以下是来自邮递员的屏幕截图,使用相同的请求参数获得了成功的结果。

Screenshot from postman

1 个答案:

答案 0 :(得分:1)

感谢Kirk Larkin的评论,我意识到我的代码正在向请求中的服务器提供空的用户名和密码。无需提供任何有意义的响应,服务器仅发送invalid_grant

一旦我提供了正确的用户名和密码,上面的代码就可以正常工作。

也许这会对某人有所帮助。