OAuth2学习笔记

Posted 点亮的芦苇

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OAuth2学习笔记相关的知识,希望对你有一定的参考价值。

参考:https://aaronparecki.com/oauth-2-simplified/

1、角色定义

应用程序(客户)

       需要获取用户的账号信息,获得相关权限。

 

API服务器

       资源服务器就是API服务器,用于获得用户的信息。

 

授权服务器

       为用户提供交互界面,确认授权请求。一般来说,和API 服务器是同一台服务器。

 

用户

       可对外提供部分账户信息的人。

 

2、创建APP

注册APP信息,一般包括名称,网站和重定向地址。

任何Http重定向地址都必须是使用TLS安全协议的,意味着地址以https开头。原生应用的重定向地址可以使用一个自定义的URL方案,例如demoapp://redirect。

3、Authorization Code授权方式

3.1、Web服务器应用

逻辑代码运行在服务器上。

创建一个登陆的连接:

https://oauth2server.com/auth?response_type=code&

  client_id=CLIENT_ID&redirect_uri=REDIRECT_URI&scope=photos&state=1234zyx

 

code:代表Web服务器希望能获得一个authorization code。

scope: 一个或多个希望获取的账号部分信息。

state: 一个随机生成的,用于验证的字符串。

如果用户同意授权,则返回以下链接:

https://oauth2client.com/cb?code=AUTH_CODE_HERE&state=1234zyx

code: 代表返回的authorization code。

state: 返回和请求相同的验证字符串。

Web服务器通过authorization code获得访问令牌。

POST https://api.oauth2server.com/token
  grant_type=authorization_code&
  code=AUTH_CODE_HERE&
  redirect_uri=REDIRECT_URI&
  client_id=CLIENT_ID&
  client_secret=CLIENT_SECRET

 

正常的话,授权服务器会返回令牌和超时时间。

{
  "access_token":"RsT5OjbzRn430zqMLgV3Ia",
  "expires_in":3600
}

 

3.2、单页面应用程序

和WebServer应用过程一致,唯一区别在于最后获取令牌时,不提供client secret。

3.3、移动应用

创建一个登陆的链接,链接到授权服务器的原生应用或者授权Web页面。

3.3.1 、原生应用

重定向地址方案需要在移动操作系统中注册,绑定到新建的移动应用。

fbauth2://authorize?response_type=code&client_id=CLIENT_ID
  &redirect_uri=REDIRECT_URI&scope=email&state=1234zyx

假如授权服务器支持PKCE扩展,还需要提供以下两个参数。

code_chanllenge

code_chanllenge_method

 

3.3.2、授权Web页面

使用移动操作系统的标准浏览器。

 

获取令牌时,如果用到了PKCE扩展,则必须提供code_verifier,即code_chanllenge的未哈希前的原文。

 

4、Password授权方式

直接通过用户名和密码获取令牌。一般用于由授权方创建的应用。

POST https://api.oauth2server.com/token
  grant_type=password&
  username=USERNAME&
  password=PASSWORD&
  client_id=CLIENT_ID

 

5、Application access授权方式

应用使用自身的注册信息登录。

POST https://api.oauth2server.com/token
    grant_type=client_credentials&
    client_id=CLIENT_ID&
    client_secret=CLIENT_SECRET

 

以上是关于OAuth2学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

OAuth2学习笔记

OAuth2:查询字符串与片段

[原创]java WEB学习笔记61:Struts2学习之路--通用标签 property,uri,param,set,push,if-else,itertor,sort,date,a标签等(代码片段

.NET 云原生架构师训练营(Identity Server)--学习笔记

DOM探索之基础详解——学习笔记

学习笔记 链接