【问题标题】:Require authorization for Swagger documentation需要 Swagger 文档的授权
【发布时间】:2015-10-12 20:26:37
【问题描述】:

我正在使用 grapegrape-swaggergrape-swagger-rails 为我的 Rails 4.2.1 项目设置 API。这将是一个内部 API,所以我希望开发人员能够访问它,但不是公众。最好的方法是什么?

我最初的想法是利用您可以在swagger-ui 中设置的api_key 字段,但我无法找到在 Grape 的根 API 生成器中访问它的正确方法。

我还认为如果用户是管理员(我们正在使用 Devise),我可以尝试仅安装文档的端点,但这不会隐藏文档本身(如果有人知道 swagger.json 链接) .

过去人们是如何处理这个问题的?

【问题讨论】:

    标签: ruby-on-rails swagger grape-api


    【解决方案1】:

    不完全是您所要求的,但您可能会感兴趣。

    为了让 swagger-ui 保持在生产环境中,使用基本身份验证:

    # routes.rb
    GrapeSwaggerRails::Engine.middleware.use Rack::Auth::Basic do |username, password|
      username == 'foo' && password == 'bar'
    end if Rails.env.production?
    
    mount GrapeSwaggerRails::Engine, at: "/swagger"
    

    【讨论】:

      【解决方案2】:

      您可以使用sorcery 进行身份验证,它添加了几个非常方便的方法(在下面的示例中logged_in?)和config/initializers/swagger.rb 添加:

      GrapeSwaggerRails.options.before_filter do |request|
        unless logged_in?
          redirect_to Rails.application.routes.url_helpers.root_path
        end
      end
      

      也可以使用api_key。在您的class API < Grape::API 中添加before 块以检查api_key 值是否正确,通过params 访问它。

      【讨论】:

      • 我实际上似乎无法在初始化程序内的params 中访问api_key。我不想将它声明为每个 API 方法的参数。
      • 我的意思不是在您的一个初始化程序中访问api_key,而是在app/api/name/api.rb 中的before 块中访问。这样就不需要将它声明为每个 API 方法的参数。
      猜你喜欢
      • 2022-01-21
      • 2018-10-24
      • 1970-01-01
      • 2015-10-29
      • 2019-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多