`
Hooopo
  • 浏览: 335386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OAuth with Ruby

    博客分类:
  • Ruby
阅读更多

1.什么是OAuth

OAuth协议致力于使网站和应用程序(统称为消费方)能够在无须用户透露其认证证书的情况下,通过API访问某个web服务(统称为服务提供方)的受保护资源。更一般地说,OAuth为API认证提供了一个可自由实现且通用的方法。

一个典型的例子是某打印服务提供商printer.example.com(消费方),希望在无须用户提供其照片存储站点密码的情况下,访问用户储存在photos.example.net(服务提供方)上的个人照片。


译言翻译:http://www.yeeyan.com/articles/view/freewizard/4418

2.Who Support

oAuth的诞生可以说是豪门云集啊。一出来的目标就是统一各个网络服务商的各自的登录/授权/认证API,例如Digg, Jaiku, Flickr, Ma.gnolia, Plaxo, Pownce, Twitter, Google, Yahoo, and others soon to follow。不服气的可以再去看看oAuth 1.0规范的作者列表,那些email地址都是牛B闪闪的大公司大巨头牛人啊。

3.Why OAuth

有很多的SNS网站,提供了通过联系人的Email匹配查找朋友的功能,对于大多数人来说,再是否做这一步的时候,都会有所迟疑,通常情况下,用户只会在自己信任的网站上这么做,不过即便这样,心里总会多少有些异样,毕竟是把帐号和密码给了别人,虽然别人保证不记录、不作第二次使用。

透过统一的OAuth机制,上面的这些个迟疑就可以避免了。和Flickr的认证类似,只需要在自己原来的网站认证就可以了,不需要提供帐号和密码给其他人。


4.How To Use


google提供了各种语言的OAuth库:http://code.google.com/p/oauth/

 

 

  • coldfusion/
  • csharp/
  • java/
  • Obj-c 1.0/
  • Obj-c 2.0/
  • perl/
  • php/
  • python/
  • ruby/

  • 5.Example for Ruby
    1.下载OAuth库

    gem install oauth


    2.以豆瓣为例

    # Douban OAuth认证包括以下四步内容
    # 1. 获取Request Token
    # 2. 用户确认授权
    # 3. 换取Access Token
    # 4. 访问受限资源
         
    gem 'oauth'
    require 'oauth/consumer'
    api_key = ""
    api_key_secret = ""
    @consumer=OAuth::Consumer.new(
                                    api_key, 
                                    api_key_secret, 
                                    { 
                                      :site=>"http://www.douban.com",
                                      :request_token_path=>"/service/auth/request_token",
                                      :access_token_path=>"/service/auth/access_token",
                                      :authorize_path=>"/service/auth/authorize",
                                      :signature_method=>"HMAC-SHA1",
                                      :scheme=>:header,
                                      :realm=>"http://yoursite.com"
                                    }
                                   )
    
    puts "1. 获取Request Token"
    @request_token=@consumer.get_request_token
    
    puts "2. 用户确认授权"
    puts "请将下面url粘贴到浏览器中,并同意授权,同意后按任意键继续:"
    puts @request_token.authorize_url
    gets
    
    puts "3. 换取Access Token"
    @access_token=@request_token.get_access_token
    
    # i should re-generate access_token proxy here, 
    # since ruby oauth library assume the domain of the auth site should be same with the resource site
    @access_token = OAuth::AccessToken.new(
                                            OAuth::Consumer.new(
                                                                  api_key,  
                                                                  api_key_secret, 
                                                                  {
                                                                    :site=>"http://api.douban.com",
                                                                    :scheme=>:header,
                                                                    :signature_method=>"HMAC-SHA1",
                                                                    :realm=>"http://yoursite.com"
                                                                  }
                                                                 ),
                                              @access_token.token,
                                              @access_token.secret
                                             )
    
    puts "4. 访问受限资源"
    @response=@access_token.post "/miniblog/saying", %q{<?xml version='1.0' encoding='UTF-8'?>
      <entry xmlns:ns0="http://www.w3.org/2005/Atom" xmlns:db="http://www.douban.com/xmlns/">
        <content>Ruby OAuth Authorized</content>
      </entry>
    },  {"Content-Type" =>  "application/atom+xml"}
    



    这里是douban-api-client的ruby实现,http://doubanclient-ruby.googlecode.com/svn/trunk/

     

    分享到:
    评论
    2 楼 风花雪月面 2009-05-15  
    mark一下。
    1 楼 Hooopo 2009-04-02  
    chenillen 写道
    最近正在用Google Data API, 谢谢对OAuth的解释

    可以直接用证书进行认证吗?


    貌似不可以的,您看一下OAuth核心规范:
      OAuth认证是指用户在不共享其证书(密码)的前提下授权消费方访问其受保护资源的过程。 在请求受保护资源的过程中OAuth使用服务提供方生成的令牌替代了用户的证书。 这一过程使用两种类型的令牌:
    请求令牌:
    用于消费方向用户请求对访问受保护资源的授权。 经过用户授权的请求令牌可以换取一个访问令牌,只能使用一次,不得用于其他用途。 建议为请求令牌设置一个有限的生命期。
    访问令牌:
    用于消费方代表用户访问受保护资源。 访问令牌可以被用于限制访问特定资源,可以只有有限的生命期。 服务提供方应当允许用户收回访问令牌。应当只有访问令牌被用于访问受保护资源。


    其实,这正是OAuth认证的优点:安全(虽然麻烦了一些)。相比HTTP Basic认证,,不需透露密码给第三方网站,而且授权后可以随时解除授权,,用户自身的顾虑少了。

    相关推荐

      Enterprise Integration with Ruby

      《企业级集成与Ruby》是一本深入探讨如何在企业环境中使用Ruby进行系统集成的专业书籍。Ruby作为一种动态、灵活且富有表现力的编程语言,近年来在软件开发领域得到了广泛应用,尤其在集成不同系统和服务方面展现出...

      Ruby-OmniAuth利用Rack中间件的一个灵活认证系统

      OmniAuth 是 Ruby 社区中一个非常流行的库,它为构建灵活的身份验证系统提供了一个统一的接口。这个系统尤其适用于处理多种外部服务的身份验证,如 OAuth 提供者(如 Google、Facebook 和 Twitter)。Ruby 开发者...

      Ruby-Faraday简单但灵活的HTTP客户端库支持多种后端

      faraday.adapter Faraday.default_adapter # make requests with Net::HTTP end response = conn.get '/path' puts response.body ``` 在这个例子中,我们创建了一个新的Faraday连接对象,设置了日志响应中间件,...

      Ruby的JSON对象签名和加密(JOSE).zip

      5. **Integration with Frameworks**: 在Ruby on Rails或其他Web框架中,你可以集成`jose`库来处理用户认证、API安全等。 总之,Ruby的JSON对象签名和加密(JOSE)提供了一套强大的工具,用于在JSON数据中实现安全...

      使用devise+omniauth进行谷歌身份验证_Ruby_JavaScript_.zip

      &lt;%= link_to "Sign in with Google", user_omniauth_authorize_path(:google_oauth2) %&gt; ``` 这个过程涉及的主要知识点包括:Devise的身份认证机制、OmniAuth的工作原理、谷歌OAuth2的配置和使用,以及如何在Rails...

      CRA+RailsAPI+设计登录+ActiveAdmin样板_Ruby_JavaScript_下.zip

      6. **文件结构**:"create-react-app-with-rails-boilerplate-master" 这个文件名可能表示这是一个基于CRA创建的React项目,其中包含与Rails API集成的基础模板。你可能会找到前端的源码(如`src`目录)、Rails的...

      ruby-meetup2:Meetup API 版本 2 的 ruby​​ 客户端

      Ruby聚会2 用于处理 Meetup API 的轻量级 Ruby 客户端。 要求 支持 net/http[s] 的 Ruby 实现 安装 $ gem install ruby_... &gt; # do something with json_s 与 OAuth 2 access_token 一起使用 &gt; client = RubyMee

      canvas_starter_app:用于构建使用 LTI、OAuth 和 Canvas API 的 Canvas 应用程序的样板

      #Canvas 入门应用该项目为构建 Canvas LTI 或 OAuth 应用程序提供了一个起点。 ##Running Canvas Starter App ###With Foreman Foreman 可以轻松启动在开发模式下运行应用程序所需的所有服务。 要使用 foreman 启动...

      auth-server:flashbox Books 的 OAuth 2.0 服务器

      Zuul 认证服务器 基于 OAuth 2.0 的认证服务器,支持用户注册和配置文件管理,以及客户端注册和管理。 要求 身份验证服务器需要 Ruby 2.0.0 或更高版本,因为它对令牌使用 AES/GCM ... #=&gt; should print something with

      discourse-doorkeeper-sso:与看门人 oauth 提供者一起使用的话语认证插件

      Discourse Doorkeeper 单点登录插件此...replace MODEL with your user class name, i.e. user 在你的 routes.rb 文件中添加一个根路径: root to : "home#index" (如果您没有主页,那么现在是创建主页的好时机)。

      firstmiler_sms_oauth:短信OTP认证

      gem 'firstmiler_sms_oauth', '0.1.1' 用法 Initialize Before you can do anything, you must have a initializer file with exotel credential. FirstmilerSmsOauth.configure do |c| c.exotel_sid = "exotel...

      garage_client:Garage应用程序API的Ruby客户端库

      客户端初始化require "garage_client"# First, you have to create a GarageClient::Client with an access token.# You can get `YOUR_ACCESS_TOKEN` with OAuth 2.0 flow.client = GarageClient :: Client ....

      Make-it-so-with-oauth:快速搭建模板

      自述 此自述文件通常会记录... Ruby版 系统依赖 配置 数据库创建 数据库初始化 如何运行测试套件 服务(作业队列、缓存服务器、搜索引擎等) 部署说明 … 如果您不打算运行rake doc:app请随意使用不同的标记语言。

      nuxt_with_rails

      标题 "nuxt_with_rails" 暗示我们正在探讨如何将 Nuxt.js,一个基于 Vue.js 的前端框架,与 Ruby on Rails 后端框架整合。这个项目可能涉及创建一个全栈 Web 应用程序,其中前端使用 Nuxt.js 提供优化的用户界面和...

      geemail:使用Google的Gmail REST API的Ruby宝石

      吉邮件 ... # do something with message end 发展 记录HTTP响应装置 获取访问令牌并将其提供给cURL: $ curl -i -H "Authorization: Bearer A_VALID_ACCESS_TOKEN" https://www.googleapis.com/gmail/

      server端源程序

      使用HTTPS加密通信、OAuth2.0或JWT(JSON Web Tokens)进行身份验证也是常见的安全措施。 6. **并发处理**:服务器端程序需要处理多个并发请求,多线程或多进程模型、事件驱动模型(如Node.js的Event Loop)或异步I...

      Rails上的API:使用Rails构建REST APIAPIs on Rails: Building REST APIs with Rails

      4. **实现认证和授权机制**:为了保证API的安全性,需要实现用户认证和权限管理功能,例如使用JWT(JSON Web Tokens)、OAuth等方式。 5. **错误处理**:定义一套统一的错误处理策略,当请求无法正确处理时能够向...

      travelize-with-react:项目-使用Rails API进行响应

      Rails,基于Ruby语言,是一个流行的Web应用框架,遵循“约定优于配置”的原则。它支持RESTful设计模式,使得API的创建变得简单。在这个项目中,Rails作为后台服务,处理数据存储、CRUD操作以及与前端的通信。开发者...

      openapi-rails-api:示例Rails 5.2 API应用程序,该应用程序使用swagger集成规范和文档。 文档驱动开发的实践

      此示例应用程序还将oauth2与doorkeeper结合使用,并将oauth流集成到swagger UI中 运行示例: 运行bin/setup ,它还将运行db:seed任务来创建oauth所需的Swagger用户和应用程序模型。 确保详细信息与config/...

      VWB-MemberTracker:CSCE 431项目

      自述文件 该自述文件通常会记录启动和运行应用程序所需的所有步骤。 您可能要讲的内容: Ruby版本 ... 在测试中使用“ login_with_oauth”绕过google oauth身份验证! -丹尼尔·潘(Daniel Phan)

    Global site tag (gtag.js) - Google Analytics