如何使用葡萄 gem 和 jwt 作为身份验证构建第三方 API

Posted

技术标签:

【中文标题】如何使用葡萄 gem 和 jwt 作为身份验证构建第三方 API【英文标题】:How to build third party API's using grape gem and jwt as authentication 【发布时间】:2016-02-21 00:08:28 【问题描述】:

我有一个为 androidios 应用程序构建的带有 api 的 web 应用程序。使用JWT 令牌进行身份验证。

现在我想为我的应用程序客户构建third party api's 以将apis 集成到那里的网站中。

我集成了Grape gem,grape-swagger 用于构建api。 因为我已经将 JWT 用于本机应用程序 api。我正在尝试对第三方 api 使用相同的身份验证。

我假设将 JWT 用于 api 是安全的,但我仍然在问。将 JWT 用于第三方 api 是否安全,因为客户端可能会暴露其令牌?

我需要一些关于如何使用 jwt 作为身份验证和葡萄来构建第三方 api 的参考/链接。

如何进行 jwt 身份验证和葡萄

我是否应该在网站上给客户一个页面以添加自定义密钥进行加密,然后生成带有 user.id 和电子邮件作为有效负载的令牌,以便他可以验证自己的签名。并要求客户端为以后的所有请求发送此令牌。 我应该创建/users/sign_in api 并在用户发送用户名密码时创建。我是否应该发送 24 小时到期的 jwt 令牌,并要求客户端每 24 小时生成一次新令牌。

有没有其他方法可以进行身份​​验证

【问题讨论】:

【参考方案1】:

我使用 JWT 使用我自己的方案进行身份验证,使用 Authorization: 标头以及客户端和服务器之间的整个通信。 Grape::API 处理程序以:

开头
content_type    :jwt, 'application/jwt'
formatter       :jwt, Rack::JWTFormatter
parser          :jwt, Rack::JWTParser
format          :jwt

错误以error_formatter 格式化,如果接收者未知(即未找到“iss”声明),则返回它而不使用JWT.encode(data, nil, 'none') 签名/加密

Grape Documentation中描述了如何实现格式化程序和解析器。

【讨论】:

【参考方案2】:

找到一个教程-http://dreamingechoes.github.io/api/ruby/rails/create-a-super-fancy-api-with-grape/

除非没有 JWT 集成。

【讨论】:

以上是关于如何使用葡萄 gem 和 jwt 作为身份验证构建第三方 API的主要内容,如果未能解决你的问题,请参考以下文章

Rails:使用敲门对 JWT 令牌进行身份验证

微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证

如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?

Node.js - JWT、API:如何实现多个 Passport.js 身份验证中间件?

如何使用JWT进行身份验证与授权

构建安全 JWT 身份验证过程的指南?