首页 > 解决方案 > 如何使用颤振授权 OAUth 2.0 API (fatsecret)

问题描述

我想对 fatsecret 服务进行授权并获得令牌。我尝试遵循https://platform.fatsecret.com/api/Default.aspx?screen=rapiauth2上的文档并在颤振中重写给定的 curl 代码,但我无法让它工作。

我已经尝试过不同类型的请求(post、get),我尝试将授权放入 url 并尝试了不同的编码。不幸的是,什么都没有改变。这是我最后一次尝试:

static void _authorizeClient() async {

  Map<String, String> params = {
    'grant_type': 'client_credentials',
    'scope': 'basic',
  };

  Map<String, String> headers = {
    HttpHeaders.contentTypeHeader: 'application/json',
    HttpHeaders.authorizationHeader:
        'Basic ' + base64Encode(utf8.encode(clientId + ':' + clientSecret))
  };

  http.Response response = await http.post(
      Uri.https('oauth.fatsecret.com', 'connect/token', params),
      headers: headers);

  final responseJson = json.decode(response.body);
}

当我在他们的网站上运行 curl 代码时,我得到了一个没有问题的令牌,但是我的代码不起作用,我总是收到一个 400 - 错误的请求。

标签: httpflutterdart

解决方案


Oauth 不是一个简单的发布请求,因此该代码无法正常工作。您不想从头开始实现 oauth 库,因为您会因加密、不成功的发布请求以及不知道 oauth 流程而头疼。我建议使用像这样的 oAuth2 库。如果您真的想创建自己的库,我可以向您指出oauth2 规范

也许你会说“但是当我在他们的网站上运行 curl 代码时,我会毫无问题地得到一个令牌”,对此我会做出回应。也许该网站已经有你的凭据,或者一些 cookie 或秘密,并且它在你不知情的情况下发送它。尝试使用 PostMan [或 RestMan,如果您使用 Opera] 来测试干净的 GET 和 POST 请求,而无需任何额外数据。


推荐阅读