OAuth2 RFC 6749 规范提供的四种基本认证方案

OAuth2 RFC 6749 规范提供了四种基本认证方案,以下针对这四种认证方案以及它们在本实现中的使用方式进行分别说面。

第一种认证方式: Authorization Code Grant (授权码认证)

授权码通过使用授权服务器做为客户端与资源所有者的中介而获得。客户端不是直接从资源所有者请求授权,而是引导资源所有者至授权服务器(由在RFC2616中定义的用户代理),授权服务器之后引导资源所有者带着授权码回到客户端。

在引导资源所有者携带授权码返回客户端前,授权服务器会鉴定资源所有者身份并获得其授权。由于资源所有者只与授权服务器进行身份验证,所以资源所有者的凭据不需要与客户端分享。

授权码提供了一些重要的安全益处,例如验证客户端身份的能力,以及向客户端直接的访问令牌的传输而非通过资源所有者的用户代理来传送它而潜在暴露给他人(包括资源所有者)。

授权码许可类型用于获得访问令牌和刷新令牌并未机密客户端进行了优化。由于这是一个基于重定向的流程,客户端必须能够与资源所有者的用户代理(通常是Web浏览器)进行交互并能够接收来自授权服务器的传入请求(通过重定向)。

Authorization Code Grant 过程(又称为 Web Server Flow) 参见如下:
     +----------+
     | Resource |
     |   Owner  |
     |          |
     +----------+
          ^
          |
         (B)
     +----|-----+          Client Identifier      +---------------+
     |          +----(A)-- & Redirection URI ---->|               |
     |  User-   |                                 | Authorization |
     |  Agent   +----(B)-- User authenticates --->|     Server    |
     |          |                                 |               |
     |          +----(C)-- Authorization Code ---<|               |
     +-|----|---+                                 +---------------+
       |    |                                         ^      v
      (A)  (C)                                        |      |
       |    |                                         |      |
       ^    v                                         |      |
     +---------+                                      |      |
     |         |>---(D)-- Authorization Code ---------‘      |
     |  Client |          & Redirection URI                  |
     |         |                                             |
     |         |<---(E)----- Access Token -------------------‘
     +---------+       (w/ Optional Refresh Token)

注:说明步骤(A)、(B)和(C)的直线因为通过用户代理而被分为两部分。
    图1:授权码流程

在图1中所示的流程包括以下步骤:

(A)客户端通过向授权端点引导资源所有者的用户代理开始流程。客户端包括它的客户端标识、请求范围、本地状态和重定向URI,一旦访问被许可(或拒绝)授权服务器将传送用户代理回到该URI。
    (B)授权服务器验证资源拥有者的身份(通过用户代理),并确定资源所有者是否授予或拒绝客户端的访问请求。
    (C)假设资源所有者许可访问,授权服务器使用之前(在请求时或客户端注册时)提供的重定向URI重定向用户代理回到客户端。重定向URI包括授权码和之前客户端提供的任何本地状态。
    (D)客户端通过包含上一步中收到的授权码从授权服务器的令牌端点请求访问令牌。当发起请求时,客户端与授权服务器进行身份验证。客户端包含用于获得授权码的重定向URI来用于验证。
    (E)授权服务器对客户端进行身份验证,验证授权代码,并确保接收的重定向URI与在步骤(C)中用于重定向客户端的URI相匹配。如果通过,授权服务器响应返回访问令牌与可选的刷新令牌。

过程实现:
    1.    client app 使用 app id 获取 authorization code:

时间: 2024-10-07 09:03:23

OAuth2 RFC 6749 规范提供的四种基本认证方案的相关文章

C++提供的四种新式转换--const_cast dynamic_case reinterpret_case static_case

1.const_cast通常被用来将对象的常量刑转换,它也是唯一有此能力的C++-style转型操作符. 2.dynamic_cast主要用来执行"安全向下转型",也就是用来决定某对象是否归属继承体系中的某个实现.他是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作. 3.reinterpret_case意图执行低级转型,实际动作(及结果)可能取决于编译器,这也就表示它不可移植.例如将一个pointer to int转型为一个int,这一类转换在低级代码意外很少见到

jdk提供的四种线程池

一.线程池什么时候用,有什么好处? "线程池"顾名思义,就是存放线程的池子,这个池子可以存放多少线程取决于采用哪种线程池,取决于有多少并发线程,有多少计算机的硬件资源.使用线程池最直接的好处就是:线程可以重复利用.减少创建和销毁线程所带来的系统资源的开销,提升性能(节省线程创建的时间开销,使程序响应更快). 二.JDK自带4种的线程池(JDK1.5之后) 2.1.固定线程数的线程池(newFixedThreadPool) 这种线程池里面的线程被设计成存放固定数量的线程,具体线程数可以考

iOS开发--四种多线程技术方案

iOS 多线程的四种技术方案 image pthread 实现多线程操作 代码实现: void * run(void *param) { for (NSInteger i = 0; i < 1000; i++) { NSLog(@"---buttonclick---%zd---%@", i, [NSThread currentThread]); } return NULL; } @implementation ViewController - (IBAction)clickBut

Executors 提供的四种线程池

1 .newCahcheThreadPool : 可根据需要创建线程的线程池,如果线程没有可用了,这时候有新任务来了,就创建一个新的线程加入到线程池里.对于在线程池中超过60s未使用的线程,会回收掉资源 2.newSigleTreadPool: 创建一个单线程的线程池,也就是这个线程池中只有一个线程在工作,任务都是串行的,如果运行线程异常结束,会有一个新的线程拉起,这个线程池能保证所有的任务的执行顺序按照用户提交的顺序执行 3.newFiexdTreadPool : 创建固定大小的线程池,每次提

OAuth 2.0 的四种授权模式

RFC 6749 OAuth 2.0 的标准是 RFC 6749 文件.该文件先解释了 OAuth 是什么. OAuth 引入了一个授权层,用来分离两种不同的角色:客户端和资源所有者.......资源所有者同意以后,资源服务器可以向客户端颁发令牌.客户端通过令牌,去请求数据. 这段话的意思就是,OAuth 的核心就是向第三方应用颁发令牌.然后,RFC 6749 接着写道: (由于互联网有多种场景,)本标准定义了获得令牌的四种授权方式(authorization grant ). 也就是说,OAu

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? Java new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub } }).start(); 1 2 3 4 5 6 7 new Thread(new

Java四种线程池

Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:2015-10-20 22:37:40      阅读:8762      评论:0      收藏:0      [点我收藏+] 介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异

Activty四种启动模式

Activty启动提供了四种启动模式.launchMode: standard:每次启动新的活动窗口(new操作) singleTop:如果在栈顶是目标活动,则直接打开.否则开启新的活动窗口(new). singleTask和singleInstance基本上相同.差别在于若根活动设置为singleTask时,则由此所开启的活动也在同一任务中,即taskId相同..而若根活动设置为singleInstance时,由此开启的活动在新的任务中.即栈中只有一个活动,taskid不同..其余情况相同.

Android中多线程的使用四种方式最全总结

当我们启动一个App的时候,Android系统会启动一个Linux Process,该Process包含一个Thread,称为UI Thread或Main Thread.通常一个应用的所有组件都运行在这一个Process中,当然,你可以通过修改四大组件在Manifest.xml中的代码块(<activity><service><provider><receiver>)中的android:process属性指定其运行在不同的process中.当一个组件在启动的