OAuth 2.0 Webapp流程概述

在最近的几篇博客中,我一直在谈论使用Spring Social访问诸如Facebook和Twitter之类的软件即服务(SaaS)提供程序。 你们中的有些人可能已经注意到,我的示例代码可能有些薄弱,因为我试图描述后台发生的事情以及Spring Social为您所做的事情。
到目前为止,我对OAuth进行了概述,将其定义为您的应用程序需要持有访问令牌,以便它可以从SaaS提供程序访问用户的私有数据,而无需用户向您的应用程序提供其凭据。 我专注于OAuth 2.0,并且还暗示过,在它可以请求访问令牌之前,您的应用需要使用一种称为“授权码”的东西,并将其与应用秘密结合在一起。
该博客将更多内容进行了放大,并希望说明发生了什么-至少在OAuth 2.0的情况下。
关于OAuth 2.0要记住的一件事是,有六个不同的流覆盖了不同的客户端方案,例如User-Agent流和Device Flow。 此描述涵盖了作为Web服务器应用程序一部分的OAuth客户端的Web服务器流。
摘要中的OAuth步骤
总之,在Web服务器流中,执行以下高级步骤:
  1. 用户登录其SaaS提供商
  2. 您的应用程序被发送了授权码
  3. 您的应用程序使用授权码来检索访问令牌
  4. 访问令牌用于检索用户的私人数据
对于某些人来说,如此高的概述就足够了,但是,如果您像我一样,那么您将希望了解正在发生的事情的某些细节。
获取OAuth 2.0授权令牌(如果通常称为“ OAuth舞蹈”),并且在该舞蹈中,有三名舞者或演员:
OAuth演员
 
演员 描述
用户 由人类用户控制的用户浏览器
TheApp 想要访问用户的SaaS数据的Web应用程序
SaaS应用 软件即服务提供商,例如Facebook
OAuth舞蹈
下表详细介绍了OAuth 2.0舞蹈…
演员 描述 数据
用户 在浏览器中导航到TheApp。 加载页面中的TheApp需要询问SaaS数据
TheApp TheApp在此SaaS提供程序上没有针对该用户的AccessToken,并且无法返回SaaS数据。
它向用户返回足够的信息以允许他/她请求一个。
authorize_url(SaaS OAuth服务的URL)
redirect_uri
client_id(应用密钥) response_type:代码
用户 用户联系SaaS提供商,要求访问令牌 是否通过以下参数获取对SaaS authorize_url的GET:
client_id :(应用密钥)
redirect_url: response_type:代码
SaaS 在SaaS Web应用程序上响应用户的登录页面
用户 在SaaS网站上输入其用户名和密码,然后按OK。 POST回传SaaS登录详细信息,例如用户名和密码
SaaS SaaS提供商要求用户确认TheApp可以访问其数据。
通常,这是通过显示一个小屏幕来询问的,例如:“您是否希望TheApp访问您的SaaS数据?
这是REST,因此在隐藏字段中进行以下操作:
client_id :(应用密钥)
redirect_url: response_type:代码
用户 向SaaS确认以上内容 client_id :(应用密钥)
redirect_url:
response_type:代码 授权= 1(或是)
SaaS SaaS提供程序不会立即创建访问令牌,而是会创建授权代码。
并将其存储以备日后再传递回用户。 然后可以使用此代码请求并生成访问令牌。

SaaS提供程序将代码作为HTTP重定向的一部分传递给用户(状态代码3xx)。

重定向到TheApp的redirect_url,其中包含:
代码:(授权码)
expires_in :(到期时间)
用户 使用GET请求从最后一步使用URL重定向回到TheApp 代码:(授权码)
expires_in :(到期时间)
TheApp 然后,TheApp使用POST调用SaaS提供程序以检索访问令牌。 client_id(应用程序ID /密钥)
client_secret?代码? (应用程序的密码) redirect_url grant_type:授权码
SaaS SaaS提供者识别授权码并创建访问令牌。
它还会撤消授权码。
将访问令牌返回给TheApp
access_token(珍贵的访问令牌)
expires_in(到期时间) refresh_token
TheApp TheApp告诉用户OAuth进程已经运行。
TheApp TheApp现在可以使用GET请求访问用户的SaaS数据。 传递访问令牌作为HTTP授权标头(或请求参数),例如:
https://graph.facebook.com/me/friends?access_token=AAAAAAITEghMWiBBlEC5OG…等等…eAVbjNnWjIlE
用户 用户现在可以在浏览器中看到TheApp显示的SaaS数据
在上表中,我包含了从请求到请求所传递的许多数据参数,即使在序列中的那个时刻始终需要它们。 这里要记住的是,由于非常实际的原因,SaaS提供程序是REST服务,因此不会在客户端请求之间保持状态。
最后要注意的一点是,所有这一切都是使用SSL进行的,以确保密钥,秘密,代码等不会被撬开。
看到所有这些操作的一个很好的方法是创建一个Hootsuite帐户,并使用它来访问您的Twitter,Facebook,LinkedIn等数据:在所有合适的位置弹出所有屏幕:可能是经典的实现。
参考:来自Captain Debug博客博客的JCG合作伙伴 Roger Hughes提供的OAuth 2.0 Webapp Flow概述

翻译自: https://www.javacodegeeks.com/2012/07/oauth-20-webapp-flow-overview.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值