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

OAuth2的一些改变

 
阅读更多

以前最烦的就是xx和我说你咋不支持OAuth啊?那是标准啊,多通用啊?同学,标准是啥?中国还有个馒头标准,直径大于多少还不算是馒头呢!其实早在我做开放平台时,OAuth的确实有了,但是当时也就是个草案,不过也是一群大牛公司的人在那儿捣鼓,但是当时没有一个真正的开放平台大牛公司的人在做这个(我认为雅虎系是当时最早一批做开放平台的)。

前几天在微博上发了三张OAuth2的手写草稿(具体可以看看t.sina.com/fangweng),其实也是为了今天在内部产品和研发小范围分享OAuth2的优势,同时也对将来淘宝开放平台授权从单应用授权到将来多平台互通做准备。OAuth1我现在依旧保持自己的看法,没觉得有什么优势在!但是,今天来看OAuth2的这些人(都是实实在在的做开放平台的人)制定的标准,可以发现它的设计缘由和优势,这里不谈OAuth2的流程,就说说几个小变化,这几个小变化直接决定了整个流程的差异化。

OAuth2流程中有2个载体,3个过程,4个角色:

两个载体:

Authorization Code Access Tokenrefresh token

三个过程:

用户认证,应用认证,用户授权

四个角色:

用户,应用,授权服务器,资源服务器

第一个改变发生在角色的拆分:将授权服务器和资源服务器拆分开来。将授权与资源访问的宿主由一一对应变成了一对多的方式,只要资源访问能够验证授权,那么任何授权服务点都可以成为该类资源的授权中心。其实也是为多种平台间互联互通技术的提供更灵活的支持,另一方面针对不同终端的授权也可以定制化流程,只要最终授权流程得到的结果可以被资源提供者所认可就行。

第二个改变发生在获取Access Token的过程,简化了一次交换Token的流程。我至今还不是很清楚折腾反复那么多次交换的用处。

第三个,对于AgentClient的模式有了更明确的流程支持。C/S模式和纯JS模式都是没有一个可以推送授权结果服务端的问题,现在流程中利用在URL参数中增加#在带上业务参数不会被302从定向提交给服务端来解决安全性和数据获取的问题。

第四个,提高开发者的授权开发门槛,降低开发服务请求门槛。可以想象的到授权本身的调用量和使用比例要远小于服务调用量。原先对于三个过程中的应用认证主要发生在服务调用中,每次调用都要对参数作签名(由于参数的复杂性及调用次数很多,入口很多,导致开发查错难),而现在应用认证和用户授权都发生在授权流程中,完全剥离了资源访问者对应用认证的处理,增加了授权开发成本,却降低了服务调用成本。(其实这种设计大量被用在前后端设计优化中)

另一些小细节也显示出了这是开放平台人做的标准:CSRF攻击的预防(增加了State字段),允许应用身份登陆(操作一些应用相关的平台型服务),scope来扩展业务访问控制范围,expires time表示Token的有效期(原来都是无限长时间的)

同时电子商务网站与SNS网站还是在安全性上有些差异,同时服务的控制方面也有不同,因此在资源提供者这段也会有一些附加的控制策略在,通过OAuth2的一些扩展点来更加细化控制。总的一句话:如果只知道Follow规范而不知道规范为什麽这么设计,那么还是不要鼓吹什么标准。不然就和馒头标准一样,说出来也就是个笑话。

分享到:
评论

相关推荐

    oauth2-apple:使用Apple Provider登录OAuth 2.0客户端

    使用Apple ID Provider登录...用法与The League的OAuth客户端相同,使用\League\OAuth2\Client\Provider\Apple作为提供者。 授权码流程 // $leeway is needed for clock skew Firebase \ JWT \ JWT :: $ leeway = 60

    基于Spring Cloud、OAuth2.0、Vue的前后端分离的系统

    2. **OAuth2.0**: OAuth2.0是一种授权框架,用于安全地处理第三方应用访问用户资源的情况。在系统中,OAuth2.0允许用户授权第三方应用访问他们存储在服务提供者(例如,基于Spring Cloud的后端)上的数据,而无需...

    angular-oauth:如何在Angular中进行身份验证

    为了实时更新用户登录状态,可以监听`oauthService.hasValidAccessToken()`,并在状态改变时执行相应操作: ```typescript this.oauthService.hasValidAccessToken().subscribe(isValid => { if (isValid) { ...

    ace-oauth:这是draft-ietf-ace-oauth-authz的工作区域

    如果您有编辑建议(即那些不会改变规范含义的建议),则可以: a)分叉该存储库并提交拉取请求; 这是获得编辑更改的最低摩擦方式。 b)向Github提交新期刊,并提及您认为它是该期刊正文中的社论。 对于编辑问题,...

    Go-Charon-授权和身份验证服务

    它提供了 OAuth2 和 OpenID Connect 支持,使得开发者能够轻松地集成用户认证流程到他们的系统中。Go 语言以其高效、简洁和并发特性,成为构建这类服务的理想选择。 在 Charon 中,身份验证是确认用户身份的过程,...

    D2Admin简化版项目起始模板

    3. **登录与注销功能**:登录页面是任何应用的基础,D2Admin简化版已经内置了用户验证和登出机制,开发者可以根据业务需求进行定制,如集成OAuth、JWT等认证策略。 4. **数据持久化**:在管理后台,数据的持久化...

    Android代码-Dribbble设计师网站非官方客户端

    >Dribbble是一个优秀的设计师网站,这里有上万优秀设计师为移动开发人员提供了...使用Dribbble提供的Oauth2认证允许用户登录,并对每个设计进行评论,点赞,收藏等功能。(已初步实现Oauth2.0认证登陆)(✔️) 改善图片

    yii2框架restful url接口 认证内容的开发的分享

    Yii2提供了多种认证方式,如HTTP基本认证、OAuth2、JWT(JSON Web Tokens)等。例如,我们可以使用`\yii\web\User::identityClass`来设置用户身份类,然后在配置中启用`\yii\filters\auth\HttpBasicAuth`进行基本...

    采用Flutter开发的一个v2ex移动App

    1. **用户登录与认证**:使用Dart实现用户注册、登录功能,可能涉及到OAuth2或其他认证协议。 2. **数据获取与展示**:通过网络请求(如http或dio库)从v2ex API获取数据,然后使用ListView、GridView等Widget展示...

    OAuthCAS 单点登录框架

    如果私钥文件的位置发生改变,需要重新启动JMeter才能确保正确加载。 #### 五、应用场景 - **企业内部系统集成**:通过OAuthCAS单点登录框架,企业可以方便地实现内部各系统的无缝对接,提高员工的工作效率。 - **...

    多种文件播放器源代码

    这些操作通过改变数据流的读取速度或者跳过特定数量的数据来实现。 用户界面设计也是播放器的重要组成部分。用户需要直观地选择文件、调整音量、设置播放模式(单曲循环、列表循环等)、以及查看播放进度等。这通常...

    Go-httpauth-Go的HTTP身份验证中间件

    中间件可以与OAuth2提供者交互,获取访问令牌,并在验证过程中使用这些令牌。 6. **错误处理和重定向** 当用户未通过身份验证时,`Go-httpauth`默认返回401未经授权的HTTP状态码。你可以自定义错误处理函数来改变...

    Ruby-Devise一个基于Warden的Rails灵活身份验证解决方案

    5. **易于定制**:开发者可以轻松地扩展和定制Devise的行为,比如改变验证消息、添加自定义验证规则,甚至实现自己的身份验证逻辑。 6. **国际化(I18n)**:Devise支持多语言,所有的错误消息和提示都可以通过配置...

    e621-api-docs:e621 API的文档库

    这个过程可能涉及到申请、权限设置以及使用 OAuth2 进行身份验证等步骤。 接下来,我们关注 API 的核心功能。e621 API 支持多种操作,包括但不限于: 1. **资源检索**:可以获取到帖子(posts)、标签(tags)、...

    Laravel开发-drupal-jsonapi

    1. **OAuth2**:配置Drupal的OAuth2服务器,并在Laravel中实现OAuth2客户端,用户在Laravel应用中登录后获取访问令牌,用于后续的API请求。 2. **JWT**:使用如`firebase/php-jwt`库在Laravel中生成和验证JWT,然后...

    机器学习实战-K均值数据

    进行机器学习实战的代码复现时发现书上给出的yahooAPI的baseurl已经改变,并且yahoo目前placefinder需要OAuth2验证。故提供完整的数据集,便于测试。

    WebApi授权拦截——重写AuthorizeAttribute

    1. **授权流程**:Web API中的授权通常基于OAuth、JWT(JSON Web Tokens)或者其他认证协议。`AuthorizeAttribute`在请求到达控制器之前进行检查,如果用户没有提供有效的身份验证凭据,它会抛出`...

    RestPractice2 rest练习2

    - 认证与授权:可以使用OAuth 2.0,JWT(JSON Web Tokens)等方式确保API的安全访问。 7. **开发工具**: - 工具如Postman可以帮助测试REST API,调试请求和响应。 - Swagger或OpenAPI规范用于文档化和测试API。...

    唯品会2019秋招开发笔试题A卷.docx

    - **改变文件所有者**:`chown` 命令用于更改文件或目录的所有者。 - **文件权限修改**:命令 `chmod a+x g+w aaa` 可以增加所有用户的执行权限和同组用户的写权限;`chmod 775 aaa` 表示设置文件权限为所有者可读写...

    yshop-drink意象桌面扫码点餐系统-springboot vue3前后端分离

    在安全方面,系统集成了Spring Security OAuth2和JWT(Json Web Token),OAuth2提供了强大的授权机制,而JWT则用于安全地传输信息。此外,系统使用了Redis作为缓存工具,来提高数据检索速度和整体性能。 ...

Global site tag (gtag.js) - Google Analytics