说下OAuth2.0协议

今天面试有问到OAuth2.0 协议是什么?平时有使用,但是没有做系统的整理,借此补全下这块知识。

1、那么先说下什么是OAuth2.0?

进入auth官网首页看到这段简述 “An open protocol to allow secure API authorization in a simple and standard method from web, mobile and desktop applications.” 翻译OAuth是一种开放的协议,为桌面、手机或web应用提供了一种简单的,标准的方式去访问需要用户授权的API服务。

好了,我们看了这话还是不太明白,那么先看实际的例子如微信授权第三方应用登录,大概流程如下:

通过Oauth协议,只需要用户在授权页面授权,第三方应用就可以获取微信用户昵称、头像、openId等基本信息,再根据这基本信息在第三方服务完成登录即可以实现微信登录到第三方应用。

2、这样有什么好处?

通过用户授权允许第三方应用访问用户资源,而不需要将用户密码分享给第三方,免去用户繁琐的注册过程。

3、OAuth2.0中有哪些角色?

client(客户端):本身不存储资源,需要通过资源拥有者的授权去请求资源服务器的资源,比如:Android客户端、Web客户端(浏览器端)、微信客户端等。

resource owner(资源拥有者):通常为用户,也可以是应用程序,即该资源的拥有者。

authorization server(授权服务器):用于服务提供商对资源拥有的身份进行认证、对访问资源进行授权,认证成功后会给客户端发放令牌 (access_token),作为客户端访问资源服务器的凭据。本例为微信的认证服务器。

resource server(资源服务器):存储资源的服务器,本例子为微信存储的用户信息。

具体流程如下:

4、OAuth2.0 授权模式

4.1 授权码模式

1)用户打开客户端请求授权,客户端向授权服务器申请授权。

/token/oauth/authorize?client_id=shopXX&response_type=code&scope=app&redirect_uri=http://xx.xx/

参数说明:

client_id

授权类型,此类型值为code

response_type

授权码模式固定为code。

redirect_uri

授权成功后重定向URL

scope

申请的权限范围

2)授权服务器返回授权页面,用户同意授权后,再重定向到应用服务页面,并携带AuthorizationCode。

https://xxx/cb?code=SplxlOBeZQQYbYS6WxSbIA&state=xxx

3)客户端获取code之后请求到应用服务获取Access Token。

/token/oauth/token?client_id=shopXX&client_secret=gdjbcd&grant_type=authorization_code&code=hjslu9861&redirect_uri=http://xx.xx/callbac

client_id

授权类型,此类型值为code

client_secret

客户端密钥。

grant_type

授权类型,填写authorization_code,表示授权码模式

code

上一步用户授权返回后返回的授权码,只能用一次。
 

redirect_uri

申请授权码时的跳转url,一定和申请授权码时用的redirect_uri一致

4)服务端根据Access Token访问资源。

4.2 密码模式

密码模式使用较多,用户使用账户密码登录,返回令牌token,根据token访问资源。

1)资源拥有者将用户名、密码发送给客户端

https://xxxx/token?grant_type=password&username=USERNAME&password=PASSWORD&client_id=CLIENT_ID

2)客户端拿着资源拥有者的用户名、密码向授权服务器请求令牌(access_token)

3)返回access_token ,客户端根据access_token请求资源

grant_type

授权类型,此类型值为password

client_id

客户端准入标识ID

client_secret

客户端密钥

username

用户名

password

密码

4.3 客户端模式

1)客户端根据客户端准入标识ID和密钥访问授权服务器

2)返回access_token ,客户端根据access_token请求资源

/token/oauth/token?client_id=shopxx&client_secret=jghsasds&grant_type=client_credentials

grant_type

授权类型,此类型值为client_credentials

client_id

客户端准入标识ID

client_secret

客户端密钥

这种场景一般用在各系统间或者合作方系统之间的接口调用,安全级别比较低。

4.4 刷新token

获取Access Token 授权步骤和授权码差不多,授权服务器返回Access Token和 refresh_token。

当通过access_token 访问出现“Invalid Token ”,使用参数refresh_token获取最新的access_token。

请求示例

/oauth/token?grant_type=refresh_token&client_id=CLIENT_ID&client_secret=CLIENT_SECRET&refresh_token=REFRESH_TOKEN

grant_type

授权类型,此类型值为refreshtoken

client_id

客户端准入标识ID

client_secret

客户端密钥

refresh_token

早期获得更新令牌

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值