oauth 流程_简明同义词典

oauth 流程_简明同义词典SSO:用户一次登陆后在多个系统免登录。博客gem'doorkeeper'https://i.cnblogs.com/EditPosts.aspx?postid=9255973

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

SSO:用户一次登陆后在多个系统免登录。

博客gem ‘doorkeeper’  https://i.cnblogs.com/EditPosts.aspx?postid=9255973

 

OAuth:用户授权第三方应用访问自己的资源无需提供账号密码。

1. 维基百科:

OAuth(开放授权)是一个开放标准,允许用户让第三方应用(网站/app)访问该用户在另一网站(qq, 微博,微信等等)上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 

OAuth允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据。每一个令牌授权一个特定的网站(例如,视频编辑网站)在特定的时段(例如,接下来的2小时内)内访问特定的资源(例如仅仅是某一相册中的视频)。这样,OAuth让用户可以授权第三方网站访问他们存储在另外服务提供者的某些特定信息,而非所有内容。

 

2 流程图(用git账号登陆第三方网站)

oauth 流程_简明同义词典

 

3. devise使用OmniAuth


 


 

简单易学的PPT:(作者大?)

 

 https://ruby-china.org/topics/15825

(笔记和摘录)

 目标

  • OAuth2 协议怎么运行的
  • 看懂基于OAuth2的第三方API
  • 知道怎么用Oauth2 锁你的API(不理解) 

 课表

  • Oauth2是什么
  • 通信协定怎么跑
  • 制造Oauth2 Provider的方法(没看, 幻灯片224页)
  • 第一次用rails+ grape api整合oauth2 就上手(略, 244页)

 


 

OAuth2.0:  the OAuth2.0 authorization framework

 

Oauth2是什么:

oauth 流程_简明同义词典

 

Resource

Resource Owner = User的情况 

  • 就是你的网站上的User
  • API拉到的是根User有关的资料
  • 比如好友名单,信件内容
  • 授权必须由本人亲自确认

Resource Owner = Client

  • 爬公开的资料,没有个体人的存在
  • Twitter称为App-Only Authorization
  • Facebook称为App Access Token

 

Client

  • User授权给第三方程序,这个程序就是Client (我的理解:web网站服务器)
  • 例子:手机上的APP, Facebook上的游戏, 桌面app。

Client必须事先注册

  • “Client Registration”
  • Client ID
  • Client secret (密码)
  • Redirect URl (重要?)

在Facebook上注册获得facebook_app_id, facebook_app_secret, 在facebook上设置redirect URIs

oauth 流程_简明同义词典

Redirect URI

  • User本人确认使用Facebook登陆后,返回结果到Client。
  • 要事先指定URl, 若不一致,则不可Redirect过去
  • 可以指定多组,上面的图指定了2组。
  • 推荐使用HTTPS.

 

Public 对比 Confidential Client

  • 根据【能否保护资料】来区分:
  • Confidential-Server-Side application 机密的服务器端程序
  • Public-手机app/桌面程序/Javascript App/ Browser Extension

Client Authorization(使用于Confidential Client)

    • 出示Client ID + Secret 向 Auth.Server认证自己(我是一个服务器商业机构,我想获得user的信息)
    • Client要登入到Auth.Server(Facebook的开发者相关的服务器)

Client

    • 有ID/Secret用于登陆
    • 用Redirect URI确认 浏览啊转地址到 正确的Client.
    • Public/Confidential 这2种模式有各自的授权流程(token获得流程)

 

Endpoints(可见下面的图)

3个端点:

 

  • Authorization Endpoint(授权端): 用来给User本人确认授权
  • Token Endpoint: 用来让Client(如:商业网站)得到Token
  • Redirection Endpoint:  Client用来收取资料的URls

 

Authorization Endpoint

  • 给用户User本人一个用于授权的网页,可以填写账号名,密码。
  • Client拿到Grant授权状,不是token。
  • Resource Owner/User答复之后, 验证服务器(facebook)会把批准码grant传回到Redirect URI

Redirection Endpoint

  • 用来从browser接收Auth.Server来的资料。
  • 把资料存在Client上(猜测:这里是商业网站服务器上)
  • Client在facebook上注册时,填写Redirection URL就是callback URL

Token Endpoint

  • 给Client取得真正的Token
  • JSON API 机械化界面,无网页。

 

Resource Server

  • Client必须出示Token才能拿资料
  • 可以使用Scope限制Token的取用范围。
  • Password-Free API
  • Login via Your Website 

 


 

 

Parameters 和 Data

Client ID/Secret

  • 用于Client认证(Client 登入到Auth.Server)
  • HTTP Basic Auth或包在Form里面。(禁用URL)

Id和secret被base64()生成乱码,放入请求头中:

Basic Auth Header

Authorization: Basic xxx乱码

 

Token(s)

  • Access Token: 打Api用的
  • Refresh Token: Access Token过期可以换新的

Access Token:

    • 向Resource Server要资料(user信息)
    • 可以绑定一组Scope
    • 可以设定气息,可以撤销Revoke
    • 授权流程的目标就是拿到Access Token

Refresh Token

    • 换发Access Token用,只会传到Auth.Server
    • 和一个Access Token绑定,随Access Token一切核发
    • 用过就失效,新的Access Token会绑定新的Refresh Token

 

Scopes

  • 用来表示哪行资料可以存取的权限范围。
  • 如: 好友名单, 相片, friends_list, photos
  • 申请授权时可以规定它。

 

State

  • 用来放在CSRF攻击(cross site request forgery)
  • Rails使用了校验token防止了这种攻击。

 

 

怎么运行的:如果取得授权(从client视角,程序程序开发者视角)

  1. Client 向Res.Owner取得Grant
  2. Client 用Grant向Authorization Server换Token
  3. Token拿到,去打API

常见的scenario:

有网站Facebook, 你希望在那上面的User(Resource Owner),

透过Facebook的Authorization Server,

给你的网站(Client)权限(Token),可以读取那User的资料(Resource Server)

例子:使用你网站的user无需注册,而是使用Fackbook/qq的账号注册。 

 

Authorization Code Grant Flow:

  • Grant是具体string, 称为Code
  • 需要经过Browser
  • 适用Client:商业网站 。

 

oauth 流程_简明同义词典

 

具体过程见幻灯片(40多张)

https://speakerdeck.com/chitsaou/jian-dan-yi-dong-de-oauth-2-dot-0?slide=73

 

步骤A之前,已经在Facebook上注册了。

当网站上的用户点击login with Facebook按钮的时候:

(A)发出Get request

oauth 流程_简明同义词典

猜测:还应该包括用户输入facebook的账号和密码。这样facebook才能找到对应用户的Res.Owner

(B)的过程,在浏览器上弹出对话框问,是否授权,用户选择同意。进入(C)

  (C)  的过程,Authorization Server传回Client数据:Grant Code。

如果(B)不授权,(c)Client收到错误的信息。

oauth 流程_简明同义词典

Redirection endPoint会检查state和存的数据是否一致。没问题就去换Token了。

(D)步骤:

  • 这是服务器后台的事情。

  • 发出 POST request到Auth.Server的Token Endpoint换Token

oauth 流程_简明同义词典

 

(E)步骤:

Authorization Server:

  1. 确认Client Auth(Id/Secret)正确。
  2. 找到Grant Code, 并确认Redirect URI 相同
  3. 发Token

Client的Token Request的Response 是 JSON Response

可以一并发Refresh Token

oauth 流程_简明同义词典

 

 

手机app/桌面app因为,客户端验证不可信,所以另有一套implicit grant flow。

具体见108页的幻灯片。

 

自产自用的,Resource Owner Password Credentials Grant Flow

具体见148页的幻灯片。

注意:需要Resource Owner高度信赖Client。可以做系统内建的应用或官方应用程序。

 

不需要User, 只存取公开资料, Client Credentials Grant Flow  160页

 

发生错误时的回应方式171页

 


 

拿到Token了,如何打API 

(RFC6750 ‘Bearer token usage’) . https://tools.ietf.org/html/rfc6750

 

发生错误时的回应方式211

 

Token过期,换掉。 Token Refresh(217页)


  

制造OAuth2 Provider的方法 =造Authorization Server (没看)

 

第一次用rails+ grape api整合oauth2 就上手(244页, 有详细步骤)

  • 用Devise生成User(Resource Owner)
  • 用Doorkeeper盖 Authorization Server
  • 用Grape盖API (Resource Server)
  • 自己刻 Resource Server Guard 来锁api

第2步骤:

rails g doorkeeper:install

rails g doorkeeper:migration

rails db:migrate

生成3个new tables

  • oauth_application: 用于Clients 注册
  • oauth_access_grant: 用于储存Auth Grant Codes
  • oauth_access_token: 真正核发出去的Access Tokens,包含对应的Refresh Token

oauth 流程_简明同义词典

 

routes.rb

oauth 流程_简明同义词典

Doorkeeper 内建的4个部分:

  • Authorization Endpoint 和 Token Endpoint
  • Token Debug Endpoint (在implicit flow验证token的真实性)
  • Client Registration Interface(crud)
  • User管理授权过的Clients的界面(可Revoke)

 

 

 

 

 

 

 


 作者最后表示完全弄懂的话,必须看HTML官方文档。


 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/167634.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 国外免费高速php空间,0fees – 300M国外高速免费PHP空间

    国外免费高速php空间,0fees – 300M国外高速免费PHP空间0fees是美国的免费空间,速度不错,提供300M空间,每月10G流量限制,ftp、web方式上传管理文件,支持PHP5,提供3个MySQL数据库,无限个支持POP3的电子邮箱,可以添加6个二级域名,绑定6个域名,可建6个不同网站,cPanel管理面板。网址:http://www.0fees.net点“OrderNow!”申请。申请很简单,填写用户名、密码、电子邮箱、网站类型、网站语言、验证码,…

    2022年9月21日
    0
  • 软件测试流程规范简介(不同公司流程规范不一样,仅供参考)「建议收藏」

    软件测试流程规范简介(不同公司流程规范不一样,仅供参考)「建议收藏」前言:整理了一下软件测试流程规范简洁,仅供参考!一、流程图概述二、测试启动阶段(需求分析)参与软件需求评审、技术评审,以测试的角度分析需求的可测性,可构思将来对测试进行的方法、原则等。更重要的是对不可测或难以测试性问题要及时与产品经理、项目经理、研发人员协调解决。全面了解需求,从用户角度考虑软件测试需要达到的验证的状态,即哪些功能需要重点测试,哪些则无需,以便将来制定测试计划。测试人员参与项目晨会,明确需求及任务完成进度及时间节点,研发人员需向测试人员提供外部应用及使用说明(如Redis、RMQ

    2022年6月5日
    35
  • 最中肯的Redis规范全在这了

    最中肯的Redis规范全在这了

    2022年2月14日
    33
  • spring cloud 入门系列三:使用Eureka 搭建高可用服务注册中心

    在上一篇中分享了如何使用Eureka进行服务治理,里面搭建的服务注册中心是单体的,但是在实际的应用中,分布式系统为了防止单体服务宕机带来严重后果,一般都会采用服务器集群的形式,服务注册中心也是一样

    2022年2月16日
    35
  • 模电学习第一天–PN结梳理

    模电学习第一天–PN结梳理基本概念本征半导体:纯净的、具有晶体结构的半导体两种载流子:自由电子、空穴(两种载流子均参与导电)本征激发:半导体在热激发下产生自由电子和空穴对的现象复合:电子填补空穴动态平衡:一定温度下,本征激发与复合产生的自由电子和空穴相等温度影响:热运动加剧–挣脱共价键束缚自由电子增多–空穴增多–载流子浓度提高–导电能力增强N型半导体:自由电子浓度大于空穴浓度,前者为多子,后者为少子P型半导体:空穴浓度大于自由电子浓度对于杂质半导体的温度影响:可以认为多子浓度约等于所掺杂质原子的浓度,且受温度影响很

    2022年6月20日
    32
  • 那些常见的C++、Qt基础面试题「建议收藏」

    那些常见的C++、Qt基础面试题「建议收藏」前言又到了金三银四的季节,每年这个时候都是跳槽的高峰期,在整理电脑资料的过程中发现一些之前记录的面试过程中最常提到的C++和Qt相关问题,其实都是些很基础的知识点,但是在面试过程中出镜率非常高。总结如下,暂不附答案,仅供参考。正文废话不多说,直接上题。C++基础篇1.线程同步的方式有哪些2.线程间通信如何实现3.进程间通信如何实现4.IO模型用过哪些5.IO实现的方式有哪些6.用过哪些STL7.迭代器实现怎么产生的,如何避免8.vector、list、map实现原理9.如何实现多

    2022年6月25日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号