OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。
OAuth协议
为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAuth的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAuth是
安全的。同时,任何第三方都可以使用OAuth认证服务,任何服务提供商都可以实现自身的OAuth认证服务,因而OAuth是
开放的。
OAuth简史:
2007年12月4日发布了OAuth Core 1.0, 此版本的协议存在严重的安全漏洞:OAuth Security Advisory: 2009.1,更详细的安全漏洞介绍可以参考:Explaining the OAuth Session Fixation Attack。2009年6月24日发布了OAuth Core 1.0 Revision A:此版本的协议修复了前一版本的安全漏洞,并成为
RFC5849,我们现在使用的OAuth版本多半都是以此版本为基础。
OAuth 2.0是OAuth协议的下一版本,但
不向后兼容OAuth 1.0。 OAuth 2.0关注客户端开发者的简易性,同时为Web应用,桌面应用和手机,和起居室设备提供专门的认证流程。
OAuth角色:
- Consumer:消费方
- Service Provider:服务提供者
- User:用户
OAuth流程:
- 用户访问客户端的网站,想操作用户存放在服务提供方的资源。
- 客户端向服务提供方请求一个临时令牌。
- 服务提供方验证客户端的身份后,授予一个临时令牌。
- 客户端获得临时令牌后,将用户引导至服务提供方的授权页面请求用户授权。在这个过程中将临时令牌和客户端的回调连接发送给服务提供方。
- 用户在服务提供方的网页上输入用户名和密码,然后授权该客户端访问所请求的资源。
- 授权成功后,服务提供方引导用户返回客户端的网页。
- 客户端根据临时令牌从服务提供方那里获取访问令牌。
- 服务提供方根据临时令牌和用户的授权情况授予客户端访问令牌。
- 客户端使用获取的访问令牌访问存放在服务提供方上的受保护的资源。
有腿的OAuth
我们前面描述的OAuth,被称为三条腿的OAuth(3-Legged OAuth),这也是OAuth的标准版本。这里所谓的“三条腿”,指的是授权过程中涉及前面提到的三种角色,也就是:消费方,服务提供者,用户。不过有 些情况下,不需要用户的参与,此时就产生了一个变体,被称作两条腿的OAuth(2-Legged OAuth),一般来说,
访问私有数据的应用需要三条腿的OAuth,访问公共数据的应用需要两条腿的OAuth。
两条腿的OAuth和三条腿的OAuth相比,因为没有用户的参与,所以在流程中就不会涉及用户授权的环节,也就不需要使用Token,而主要是通 过Consumer Key和Consumer Secret来完成签名的,此时的Consumer Key和Consumer Secret基本等价于账号和密码的作用。
OAuth和OpenID的区别:
OAuth关注的是authorization授权,即:“用户能做什么”; 而OpenID侧重的是authentication认证,即:“用户是谁”。
OpenID、OAuth联合使用例子:
- OpenID 用户希望访问其在example.com的账户
- example.com(在OpenID的黑话里面被称为“Relying Party”) 提示用户输入他/她/它的OpenID
- 用户给出了他的OpenID,比如说"http://user.myopenid.com"
- example.com 跳转到了用户的OpenID提供商“mypopenid.com”
- 用户在"myopenid.com"(OpenID provider)提示的界面上输入用户名密码登录
- “myopenid.com" (OpenID provider) 问用户是否要登录到example.com
- 用户同意后,"myopenid.com" (OpenID provider) 跳转回example.com
- example.com 允许用户访问其帐号
- 用户在使用example.com时希望从mycontacts.com导入他的联系人
- example.com (在OAuth的黑话里面叫“Consumer”)把用户送往mycontacts.com (黑话是“Service Provider”)
- 用户在mycontacts.com 登录(可能也可能不用了他的OpenID)
- mycontacts.com问用户是不是希望授权example.com访问他在mycontact.com的联系人
- 用户确定
- mycontacts.com 把用户送回example.com
- example.com 从mycontacts.com拿到联系人
- example.com 告诉用户导入成功
上面的例子告诉我们,
OpenID是用来认证协议,OAuth是授权协议,二者是互补的。OAuth来自Twitter,可以让A网站的用户共享B网站上的他自己的资源,而不需泄露用户名和密码给另外一个网站。OAuth可以把提供的Token,限制在一个网站特定时间段的的特定资源。
Google Connect(基于OpenID + OAuth思想的定制):
OAuth 2.0的新特性 - 6种全新流程:
- User-Agent Flow – 客户端运行于用户代理内(典型如web浏览器)。
- Web Server Flow – 客户端是web服务器程序的一部分,通过http request接入,这是OAuth 1.0提供的流程的简化版本。
- Device Flow – 适用于客户端在受限设备上执行操作,但是终端用户单独接入另一台电脑或者设备的浏览器
- Username and Password Flow – 这个流程的应用场景是,用户信任客户端处理身份凭据,但是仍然不希望客户端储存他们的用户名和密码,这个流程仅在用户高度信任客户端时才适用。
- Client Credentials Flow – 客户端使用它的身份凭据去获取access token,这个流程支持2-legged OAuth的场景。
- Assertion Flow – 客户端用assertion去换取access token,比如SAML assertion。
OAuth 2.0的新特性:
持信人token - OAuth 2.0 提供一种无需加密的认证方式,此方式是基于现存的cookie验证架构,token本身将自己作为secret,通过HTTPS发送,从而替换了通过 HMAC和token secret加密并发送的方式,这将允许使用cURL发起APIcall和其他简单的脚本工具而不需遵循原先的request方式并进行签名。
签名简化 - 对于签名的支持,签名机制大大简化,不需要特殊的解析处理,编码,和对参数进行排序。使用一个secret替代原先的两个secret。
短期token和长效的身份凭据 - 原先的OAuth,会发行一个 有效期非常长的token(典型的是一年有效期或者无有效期限制),在OAuth 2.0中,server将发行一个
短有效期的access token和长生命期的refresh token。这将允许客户端无需用户再次操作而获取一个新的access token,并且也限制了access token的有效期。
角色分开 - OAuth 2.0将分为两个角色: Authorization server负责获取用户的授权并且发布token; Resource负责处理API calls。
参考:
OAuth2.0
OpenID&Oauth
The OAuth 2.0 Authorization Framework draft-ietf-oauth-v2-31
安全声明(断言)标记语言 saml(Security Assertion Markup Language)
- 大小: 112.7 KB
- 大小: 134.5 KB
分享到:
相关推荐
OpenID和OAuth是互联网上两种重要的身份验证和授权协议,它们在确保用户数据安全和隐私保护方面发挥着关键作用。本文将对这两种协议进行详细解释。 **OpenID协议** OpenID是一个分散式身份验证协议,它允许用户...
使用asp开发的微信登录-Oauth2.0获取用户openid、头像、昵称等相关信息,用于公众号相关应用开发。
ORY Hydra是经过强化,经过OpenID认证的OAuth 2.0服务器和OpenID Connect提供商,针对低延迟,高吞吐量和低资源消耗进行了优化。 ORY Hydra不是身份提供者(用户注册,用户登录,密码重置流程),而是通过登录和同意...
- **提升应用安全**:对于开发者来说,采用OpenID与OAuth可以显著简化身份验证和授权流程,避免了自行开发认证系统的复杂性和潜在安全漏洞。 #### 四、结论 综上所述,Web2.0的安全威胁主要来源于授权访问机制不...
微信OAuth2.0接口是微信官方...总的来说,微信OAuth2.0接口为ASP开发者提供了与微信平台深度集成的能力,使用户能够无缝地使用微信账户登录应用,同时也要求开发者对OAuth2.0协议和微信API有深入的理解和熟练的运用。
OAuth 2.0 和 OpenID Connect 是两个在互联网身份验证和授权领域至关重要的协议。OAuth 2.0 主要关注的是资源访问的权限委托,而 OpenID Connect 则是在 OAuth 2.0 的基础上增加了一个身份验证层,使得用户可以安全...
本主题将深入探讨如何在ASP(Active Server Pages)环境中利用OAuth2.0接口实现微信登录,并获取用户的OpenId、Access_Token以及个人资料如头像、昵称和性别等信息。 首先,OAuth2.0是授权框架,它允许第三方应用在...
授权服务器兼容OAuth 2.0和OpenID Connect(OIDC)的授权服务器,仅用于演示目的,可用作OAuth2 / OIDC研讨会的一部分。目标此授权服务器应... 作为开源免费提供支持学习OAuth2 / OpenID Connect的努力(自学或作为...
OpenID Connect providers. It strives to directly map the requests and responses of those specifications, while following the idiomatic style of the implementation language. In addition to mapping the ...
标题中的“Python-NET标准助手库用于基于声明的身份OAuth20和OpenIDConnect”表明这是一个针对.NET标准的Python库,其主要功能是协助处理身份验证和授权,具体涉及OAuth 2.0和OpenID Connect协议。这两个协议在现代...
基于Python的统一身份认证授权管理系统提供了一种高效、安全的解决方案,它能够支持多种业界标准协议,如LDAP(轻量目录访问协议)、OAuth2、SAML(Security Assertion Markup Language)以及OpenID。这些协议在不同...
目前网上用php获取微信openid的方法比较多,asp获取的方法几乎没有,这个已运用于实际项目中,确实可用
OpenID是一个开放式标准,它主要描述了在用户在分布式系统的认证方式以及提供了一套额外的服务系统允许用户方便...OAuth协议最初的出现是为了解决不同网站和其他互联网服务商访问受保护的资源这个普遍性问题而设计的。
OpenID和OAuth是两种广泛使用的身份验证和授权协议,它们在网络身份管理和权限控制方面起着重要作用。OpenID允许用户使用单一标识(通常是URI或URL)在多个网站上进行身份验证,实现了“一处注册,处处通行”的理念...
aerogear-ios-oauth2, oauth2/openid连接的客户端库 aerogear-ios-oauth2 基于 aerogear-ios-http的OAuth2客户端。项目信息许可证:Apache许可,版本 2.0生成:CocoaPodsLangu
在这个源码中,我们可能会看到如何将Spring Security与OAuth结合,以构建安全的Web应用程序和服务。Sparklr2和Tonr2是官方提供的示例应用,它们分别扮演了OAuth的资源服务器和客户端角色,帮助开发者理解OAuth的实际...
OAuth 2.0 OpenID Connect服务器 这将在PHP League的之上实现OpenID Connect规范。 要求 需要PHP 5.5或更高版本。 5.1或更高版本。 注意:League / oauth2-server版本可能具有更高PHP要求。 用法 为了提供OpenID ...
4. **用户认证**:OAuth2通常与OpenID Connect结合使用,以提供用户身份验证。当用户尝试访问受保护的资源时,会被重定向到一个登录页面进行身份验证。 5. **单点登录(SSO)**:SSO允许用户在一个地方登录后,无需...
- **Flask和FastAPI集成**: 支持与流行的Web框架Flask和FastAPI无缝集成,方便构建授权服务。 - **易于扩展**: `Authlib` 的设计使得它可以轻松地扩展到新的OAuth 2.0或OpenID Connect规范。 - **安全**: 提供了强大...
### 利用OpenID和OAuth进行安全授权及风险防范的分析 #### 一、Web应用的发展现状 随着Web网络技术的迅速发展,网络应用日益丰富多样。以社交、分享为代表的Web 2.0应用已经成为互联网的重要组成部分,这些应用极...