OAuth介绍 - 使用场景

OAuth介绍 - 使用场景

OAuth是一个开放的授权协议,它提供一个方法可以让你授权某个人来代表你去访问你保存在服务器上的资源,但不会向你的代表泄露你的登录密码。本文主要描述OAuth的使用场景,以帮助用户理解OAuth能帮助解决什么问题。

0. 使用场景所涉及的参与者

(1) Service Provider (photos.example.net),它是一个提供照片存储服务的网站
(2) Consumer (printer.example.com),它是一个提供照片打印服务的网站
(3) User:Jane

需求:Jane的照片vacation.jpg存储在photos.example.net上,她使用username和password登录后可以访问该照片(即访问一个URL地址 http://photos.example.net/photo?file=vacation.jpg),但其它人无法访问她的照片。现在她想使用printer.example.com提供的打印服务,但又不想泄 露她在photos.example.net上的username和password。

1. 注册

Service Provider (photos.example.net)公开Consumer Key和Consumer Secret的使用方法及如下URL地址:
https://photos.example.net/request_token, 使用HTTP POST 
http://photos.example.net/authorize, 使用HTTP GET 
https://photos.example.net/access_token, 使用HTTP POST 

若Consumer (printer.example.com)在Service Provider (photos.example.net)上注册成功后,将可能获得如下的凭证:
Consumer Key: dpf43f3p2l4k3l03
Consumer Secret: kd94hf93k423kf44
至此,Consumer 便可以打广告说:“我们可以提供photos.example.net上的照片打印服务了”。

2. 获取访问请求令牌(Request Token)

若Jane告知Consumer (printer.example.com)去打印存放在photos.example.net上的私有照片,Consumer 将去访问照片的URL,但第一次将返回“未授权访 问”的错误信息,并且header信息中包含:WWW-Authenticate: OAuth realm="http://photos.example.net/"。

Consumer将向Service Provider发送HTTP POST访问请求:

    https://photos.example.net/request_token?
    oauth_consumer_key=dpf43f3p2l4k3l03&
    Oauth_signature_method=PLAINTEXT&
    Oauth_signature=kd94hf93k423kf44%26&
    Oauth_timestamp=1191242090&
    Oauth_nonce=hsu94j3884jdopsl&
    oauth_version=1.0

Service Provider将验证签名,然后返回一个未授权的Request Token:

    oauth_token=hh5s93j4hdidpola&
    oauth_token_secret=hdhd0244k9j7ao03

3. 请求用户授权(User Authorization)

Consumer将重定向Jane的浏览器到Service Provider的Authorization URL,以获取Jane的许可:

    http://photos.example.net/authorize?
    oauth_token=hh5s93j4hdidpola&
    oauth_callback=http%3A%2F%2Fprinter.example.com%2Frequest_token_ready

Service Provider要求Jane登录认证,如果认证成功,则询问Jane是否同意printer.example.com去访问她的私有照片。如果Jane许可此次访问,Service  Provider将重定向到Consumer的URL:

    http://printer.example.com/request_token_ready?
    oauth_token=hh5s93j4hdidpola

4. 获取访问令牌(Access Token)

现在Consumer知道Jane已经对Request Token进行了批准,下面将向Service Provider请求Access Token:

    https://photos.example.net/access_token?
    oauth_consumer_key=dpf43f3p2l4k3l03&
    oauth_token=hh5s93j4hdidpola&
    oauth_signature_method=PLAINTEXT&
    oauth_signature=kd94hf93k423kf44%26hdhd0244k9j7ao03&
    oauth_timestamp=1191242092&
    oauth_nonce=dji430splmx33448&
    oauth_version=1.0

Service Provider将验证签名,然后返回Access Token:

    oauth_token=nnch734d00sl2jdk&
    oauth_token_secret=pfkkdhi9sl3r4s00

5. 访问Jane的私有照片

由于照片URL是不安全的HTTP,所以需使用消息认证方法,如HMAC-SHA1。

(1) 准备待签名基串(Signature Base String)

访问请求将包含如下参数:

    oauth_consumer_key:
        dpf43f3p2l4k3l03 
    oauth_token:
        nnch734d00sl2jdk 
    oauth_signature_method:
        HMAC-SHA1 
    oauth_timestamp:
        1191242096 
    oauth_nonce:
        kllo9940pd9333jh 
    oauth_version:
        1.0 
    file:
        vacation.jpg 
    size:
        original 

那么,待签名基串将包含如下内容:

   1) GET
   2) http://photos.example.net/photos
   3) file=vacation.jpg&
      oauth_consumer_key=dpf43f3p2l4k3l03&
      oauth_nonce=kllo9940pd9333jh&
      oauth_signature_method=HMAC-SHA1&
      oauth_timestamp=1191242096&
      oauth_token=nnch734d00sl2jdk&
      oauth_version=1.0&
      size=original

(2) 计算签名

使用HMAC-SHA1计算上述基串的HMAC值(注意:此处将使用Consumer Secret & oauth_token_secret作为key,即kd94hf93k423kf44&pfkkdhi9sl3r4s00),

得到一个base64编码结果:tR3+Ty81lMeYAr/Fid0kMTYa/WM=

(3) 访问请求

Consumer使用如下的方法去访问Jane的照片:

      http://photos.example.net/photos?file=vacation.jpg&size=original

      Authorization: OAuth realm="http://photos.example.net/",
      oauth_consumer_key="dpf43f3p2l4k3l03",
      oauth_token="nnch734d00sl2jdk",
      oauth_signature_method="HMAC-SHA1",
      oauth_signature="tR3%2BTy81lMeYAr%2FFid0kMTYa%2FWM%3D",
      oauth_timestamp="1191242096",
      oauth_nonce="kllo9940pd9333jh",
      oauth_version="1.0"

Service Provider (photos.example.net)将检查签名,如果验证成功则返回访问结果。

参考文献:

[1] OAuth Core 1.0, http://oauth.net/core/1.0/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
spring-security-oauth2-2.2.3.release.jar是一个用于实现基于OAuth 2.0协议的安全认证和授权的Java库。OAuth 2.0协议是一种用于授权的开放标准,它允许用户通过授权代理向第三方应用程序授权访问受保护的资源,而无需将用户的凭证(例如用户名和密码)透露给第三方。 spring-security-oauth2-2.2.3.release.jar提供了一套面向Spring应用程序的OAuth 2.0认证和授权解决方案。它可以轻松地将OAuth 2.0集成到现有的Spring应用程序中,并提供了一系列的API和类,使开发人员可以方便地实现OAuth 2.0认证和授权流程。 使用spring-security-oauth2-2.2.3.release.jar,开发人员可以通过配置和自定义一些核心组件(例如TokenStore、AuthorizationServer和ResourceServer)来实现OAuth 2.0的四种授权类型:授权码模式、密码模式、客户端模式和简化模式。通过这些授权类型,开发人员可以实现不同的应用场景和需求。 此外,spring-security-oauth2-2.2.3.release.jar支持使用不同的存储机制来存储和管理OAuth 2.0令牌,例如内存存储、数据库存储和Redis存储。开发人员可以根据自己的需求选择并配置合适的存储机制。 总的来说,spring-security-oauth2-2.2.3.release.jar提供了一种简单、可扩展且安全的方式来实现OAuth 2.0认证和授权。无论您是开发面向Web、移动还是其他类型应用程序,该库都能帮助您轻松地实现与第三方应用程序的安全集成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值