在传统的Client-Server认证模型中,客户端请求访问服务器上受限的资源(Protected Resource),需要通过使用资源所有者(Resource Owner)的凭证在服务器上进行认证。为了支持第三方应用程序访问受限资源,资源所有者需要向第三方应用共享其凭证。这就会造成以下问题:
- 第三方应用为了后续使用,会存储资源所有者的凭证主要是密码。
- 服务端需要支持密码认证,尽管密码认证不安全。
- 第三方应用获得对资源的过度访问而不仅局限于受限资源,且资源所有者没有办法对其进行限制。
- 资源所有者无法收回权限,除非修改密码。
- 如果第三方应用的密码被破解,就会导致所有被该密码保护的数据被泄露。
OAuth2简介:
OAuth2是一个委托协议,它可以让那些掌控资源的人允许某个应用来访问他们掌控的资源,注意这时候是代表那些人而不是假冒或模仿那些人,这些应用从控制者得到授权(Authorization-你能干什么?)而不是身份认证(Authentication-你是谁?)和Access Token来访问这些资源。
OAuth2 授权服务器:
这里面主要包含四个角色:
- Client:需要授权的客户端。
- Resource Owner:资源所有者。
- Authorization Server:授权服务器。
- Resource Server:资源服务器,顾名思义,用来专门保存资源的服务器,接受通过访问令牌进行访问。
授权类型:
Scope范围:代表资源所有者在被保护资源的一些权限
可由自己决定,如将读权限分配为ReadScope,写权限为WriteScope等。
如在Access Token(用来访问被保护的资源):需描述出Scope的范围和持续时间等。
Refresh Token:
用来获取Access Token的凭证,也是Authorization Server 发给客户端的凭证。
它在传递参数中是可选的,刷新获得的Access Token 权限可能会越来越小。
OpenID Connect简介:
为什么不使用Access Token来进行身份认证呢?