为啥我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效?

Posted

技术标签:

【中文标题】为啥我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效?【英文标题】:Why is my Auth0 token always coming back as invalid when sent from iOS to node.js server?为什么我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效? 【发布时间】:2016-11-22 16:56:57 【问题描述】:

我正在将 Auth0 的服务用于 ios 应用程序,该应用程序具有基于 node.js 和 express.js 构建的服务器。我已尽我所能关注 Auth0 的文档和种子项目,但服务器一直抱怨我从 iOS 应用程序发送的令牌无效。这是我的一些代码:

来自服务器 - 身份验证和路由声明,在 Auth0 documentation 中指定

var authenticate = jwt(
  secret: new Buffer(process.env.AUTH0_CLIENT_SECRET, 'base64'),
  audience: process.env.AUTH0_CLIENT_ID
);


app.use('/api', authenticate);
app.use('/api/userquery', queries);

在 iOS 中,设置请求的标头(使用 AFNetworking):

request.setValue("Bearer \(token)", forHTTPHeaderField: "Authorization")

我知道请求正在正确发送,因为它适用于不需要身份验证的路径。最后,这是我在服务器端收到的错误:

GET /api/userquery/currentUser 401 7.185 ms - 436
UnauthorizedError: invalid token
    at /node_modules/express-jwt/lib/index.js:100:22
    at /node_modules/jsonwebtoken/index.js:155:18
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

【问题讨论】:

你检查服务器的响应了吗?它可能是一个包含 URL 和带有令牌的正文的对象。 在 iOS 端,我只是得到这个错误的响应: Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: authorized (401)" 你发送什么令牌?确保它是 id_token 而不是 access_token(后者不是 JWT)。 确实是idToken。 【参考方案1】:

问题只是我在将令牌从钥匙串中拉出后未能解开它。我没有在 Authorization 标头中发送“Bearer [token]”,而是发送“Bearer [Optional(token)]”。

【讨论】:

以上是关于为啥我的 Auth0 令牌从 iOS 发送到 node.js 服务器时总是返回无效?的主要内容,如果未能解决你的问题,请参考以下文章

PHP中的Auth0 JWT令牌验证

如何使用我的后端中使用的前端反应中的 Auth0 访问令牌

为啥 auth0 建议不要在 localStorage 中存储令牌?

可以使用 Auth0 JWT 令牌向 Django 后端发送 POST 请求吗?

签署令牌如何工作? (无效签名错误)

从 API 中访问 Auth0 登录用户?