如何使用葡萄 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 【问题描述】:我有一个为 android 和 ios 应用程序构建的带有 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的主要内容,如果未能解决你的问题,请参考以下文章
微服务 - 如何使用 JWT 对单独的 API 微服务进行身份验证
如何基于使用 Oauth2 协议的身份验证改进 JWT 访问令牌和刷新令牌?