OAuth 是一种授权框架,用来让用户允许第三方应用访问他的账户资源的一种授权框架,例如很多网站提供的 QQ/微信/微博登录,即使该网站和腾讯微博并没有什么关系。
OAuth 定义了四个角色:
Resource Owner:资源所有者,也就是用户
Client:客户端,例如你想要使用 QQ 登录博客园网站,那么博客园就是 Client
Resource Server:资源服务器,例如 QQ 服务器
Authorization Server:授权服务器,例如 QQ 服务器
对于开发者来说通常 Resource Server 和 Authorization Server 是绑定在一起的。
OAuth 的简化抽象授权流程如下图所示:
应用向用户请求授权,当授权被同意以后,应用请求并获取令牌,然后通过令牌向资源服务器请求服务。
同时应用在使用 OAuth 之前,需要向授权服务器注册并至少提供应用名,应用站点和回调 URL 等信息。在注册完成以后,授权服务将提供 client identifier 和 client secret 来标识和证明应用的身份,client identifier 是公开的,但是 client secret 是机密。
OAuth2 定义了三种主要的授权方式:
- Authorization Code
- Client Credentials
- Device Code
Authorization Code
Authorization Code 是应用最多的,适用于服务端应用程序,也就是各种网站站点。具体流程如下
首先进入授权页面,例如
/v1/oauth/authorize?response_type=code&client_id=CLIENT_ID&redirect_uri=CALLBACK_URL&scope=read
然后在该页面完成授权,例如
然后跳转到你的应用注册的回调 URL,并且携带上 Authorization Code,此时 Redirect 的 URL 类似这样
https://cnblogs.com/callback?code=AUTHORIZATION_CODE
那么此时你已经获得了授权码,此时向授权服务器请求 Token,当获得到 Token 以后就可以向资源服务器请求资源。
Client Credentials
Client Credentials 直接向授权服务器发送证书,请求 Token,例如 Post 发送 URL https://oauth.example.com/token?grant_type=client_credentials&client_id=CLIENT_ID&client_secret=CLIENT_SECRET
Device Code
适用于没有浏览器或者输入方式受限的设备,实际可见二维码登录等。
机器首先 Post 发送 device code 授权请求(同时携带 Client ID),然后授权服务器可能返回一个如下的响应
{
"device_code": "IO2RUI3SAH0IQuESHAEBAeYOO8UPAI",
"user_code": "RSIK-KRAM",
"verification_uri": "https://example.okta.com/device",
"interval": 10,
"expires_in": 1600
}
其中 device_code 可能是类似的一串代码,又或者是一个 URL 或者是一个二维码。
- 如果是一串代码,用户方法在指定的 URL 输入这串代码
- 如果是一个 URL,用户访问这个 URL
- 如果是一个二维码,用户扫描这个二维码
然后应用轮询这个 verification_uri,知道返回错误或者返回 Token。
标签:code,OAuth2,URL,简介,client,授权,服务器,Authorization From: https://www.cnblogs.com/freesfu/p/17080732.html